mssql 다중 pivot 예제

동적 SQL을 사용하는 것은 열 값을 미리 알 필요가 있지만 동적 SQL을 사용할 때 는 주입 공격에 대한 예방 조치를 취해야 합니다. 예를 들어 QUOTENAME 함수는 구분된 문자열을 반환하여 열 이름이 유효한 구분된 식별자인지 확인하여 개체 이름을 통해 삽입되지 않도록 합니다. 동적 SQL을 사용하기 전에 SQL 주입이 어떻게 작동하는지 이해해야 합니다. 선택 목록에서 열을 지정할 수 있다는 또 다른 장점은 별칭을 할당할 수 있다는 것입니다. 다음 예제에서는 세 개의 열 각각에 별칭을 할당했습니다. 피벗 된 열입니다. 예를 들어 다음 PIVOT 절의 IN 연산자는 2014 값만 포함합니다. 내 테이블은 다음과 같이 구성됩니다 : 이와 같은 간단한 예제의 경우 데이터를 피벗하는 원래 의 방법은 그렇게 나쁘지 않습니다. 그러나 피벗 열에서 많은 고유 값을 처리하는 경우 이러한 모든 CASE 식을 만드는 것이 상당히 지루해질 수 있습니다. 다른 한편으로는, 당신이 원하지 않거나 PIVOT 연산을 사용할 수없는 경우 로 설정할 수있는 대안을 가지고 하는 것이 좋습니다. 이제 집계된 데이터는 이전 예제와 다른 순서로 나열됩니다.

예를 들어 다음 PIVOT 절은 AVG 함수를 사용합니다. 우리의 예제 임시 테이블로 돌아가봅시다: Plamen, 이것은 진정으로 당신의 일의 훌륭한 예입니다. 나는 그것이 한 단계 더 촬영하고 MAX ([2003]) AS v2003 / MAX ([3]) AS q2003의 결과에 분할을 추가 할 수있는 방법을 궁금해, 당신은 앞의 예에서 보았듯이, 우리는 PIVOT 연산자에서 생성 된 기본 열 이름으로 이동하려는 경우 SELECT 절에서 별표만 사용할 수 있습니다. 그러나 이전 예제와 마찬가지로 PIVOT 절은 BookSales 및 SalesYear 열만 지정하므로 다음 결과에 표시된 것처럼 피벗될 때 데이터가 BookType 및 BookSubtype 열로 그룹화됩니다. 데이터를 분류하는 추가 방법을 제공하기 위해 BookSubtype 열을 포함합니다. 그런 다음 다음과 같은 예에서와 같이 테이블 식에 열을 포함할 수 있습니다. 그러나 UNPIVOT를 단순히 PIVOT 작업을 취소하는 것으로 간주해서는 안 됩니다. 예를 들어, 이번에는 #BookSales 테이블의 정규화된 버전으로 시작한다고 가정합니다.

liftdivision