PIVOT 연산자는 PIVOT 연산자에서 지정하지 않은 열을 기반으로 데이터가 암시적으로 그룹화된다는 점에서 약간 이상합니다. 예제 임시 테이블로 돌아가보겠습니다: 예를 들어 두 번째 열은 연간 판매된 수량 대신 연간 가격 목록이며 최신/최신 가격을 얻으려고 합니다. 이제 판매 합계와 평균을 모두 반환한다고 가정해 보겠습니다.이 경우 SUM 및 AVG 집계 함수를 사용해야 합니다. 이렇게 하는 매우 간단한 방법은 다음 예제와 같이 각 데이터를 피벗한 다음 두 CTE를 함께 조인하는 두 개의 공통 테이블 식(CTE)을 만드는 것입니다. 대신 기본값0으로 설정하지만 지금은 PIVOT 절에 지정되지 않은 모든 열을 기준으로 그룹화하는 점을 보여 줄 만큼 충분합니다. 시도해 봅시다. 다음 SELECT 문은 앞의 예제와 동일합니다. 예를 들어 QUOTENAME 함수는 구분된 문자열을 반환하여 열 이름이 유효한 구분된 식별자인지 확인하여 개체 이름을 통해 삽입되지 않도록 합니다. 동적 SQL을 사용하기 전에 SQL 주입이 어떻게 작동하는지 이해해야 합니다. 지금까지 예제에서는 쿼리를 작성할 때 피벗 된 열의 값을 알 수 있다고 가정했습니다. 그러나 새 열을 정의할 방법이 없는 경우가 많습니다. 이러한 제한을 극복하려면 동적 SQL을 사용하여 즉시 T-SQL 문을 구성해야 합니다.

먼저 #BookSales 테이블의 또 다른 화신인 PIVOT 함수는 데이터를 단순화된 구조로 변환하는 강력한 도구입니다. 처음에는 피벗되는 것과 어떻게 해야 하는지 파악하는 것이 어려워 보일 수 있습니다. 위의 예제를 통해 두 개 이상의 필드를 피벗할 수 있습니다. 각 접근 방식에 대한 장단점이 있으므로 SQL Server 또는 클라이언트에서 데이터를 변환할지 여부를 고려해야 합니다. PIVOT 함수는 피벗의 복잡성 및/또는 변환되는 데이터의 크기에 따라 쿼리에 성능에 영향을 줄 수 있습니다. 이 성능 영향은 적절한 필터가 적용되는 경우 예상보다 적을 수 있습니다. PIVOT 함수를 사용하든 비즈니스 계층에서 동등한 기능을 구현하든 성능 테스트는 중요합니다. 잘 구성된 PIVOT 문은 SQL 외부에서 피벗하는 데 필요한 코드가 매우 복잡할 수 있으며, 특히 키 필드에서 NUL이 허용되는 경우 다운스트림 버그의 가능성을 줄여줄 수 있습니다.

기본적으로 선택 목록의 첫 번째 열은 집계된 그룹화의 기반이 되는 열입니다. PIVOT 절에 지정하지 않은 열입니다. 후속 열은 피벗된 열의 고유 값을 기반으로 합니다. 이전 예제를 반복하지만 선택 목록에 열 이름을 포함하면 쿼리는 다음과 같이 표시됩니다. 책 “SQL 디자인 패턴”에서 연산자, 매우 권장. 또한 행을 열로 피벗하고 행에 피벗 열을 지정하는 방법을 참조하세요. 플라멘, 이것은 진정으로 당신의 작품의 좋은 예입니다. 나는 그것이 한 단계 더 촬영하고 MAX ([2003]) AS v2003 / MAX ([3]) AS q2003의 결과에 분할을 추가 할 수있는 방법을 궁금해, 현실 세계에서, 우리의 소스 데이터 세트는 거의 그렇게 간단하지 않습니다.