FROM-PIVOT 및 UNPIVOT 사용

  • 2019 년 10 월 14 일
  • 읽는 데 5 분
    • V
    • c
    • M
    • i
    • M
    • +7

적용 대상 : SQL Server (지원되는 모든 버전) Azure SQL 데이터베이스 Azure SQL 관리 형 인스턴스 Azure Synapse Analytics 병렬 데이터웨어 하우스

PIVOTUNPIVOT 관계 연산자를 사용하여 테이블 반환 식을 다른 테이블로 변경합니다. PIVOT는 식의 한 열에서 고유 한 값을 출력의 여러 열로 변환하여 테이블 반환 식을 회전합니다. 그리고 PIVOT는 최종 출력에서 원하는 나머지 열 값에 필요한 집계를 실행합니다. UNPIVOT는 반대 작업을 수행합니다. 테이블 반환 식의 열을 열 값으로 회전하여 PIVOT으로 변환 할 수 있습니다.

PIVOT가 제공하는 구문은 그렇지 않은 경우보다 간단하고 읽기 쉽습니다. 복잡한 일련의 SELECT...CASE 문에 지정됩니다. PIVOT 구문에 대한 전체 설명은 FROM (Transact-SQL)을 참조하세요.

구문

다음 구문은 PIVOT 연산자를 사용하는 방법을 요약합니다.

참고

UNPIVOT 절의 열 식별자는 카탈로그 데이터 정렬을 따릅니다. SQL Database의 경우 데이터 정렬은 항상 SQL_Latin1_General_CP1_CI_AS입니다. SQL Server의 경우 부분적으로 포함됩니다. 데이터베이스의 경우 데이터 정렬은 항상 Latin1_General_100_CI_AS_KS_WS_SC입니다. 열이 combin 인 경우 다른 열과 함께 사용 된 경우 충돌을 피하기 위해 collate 절 (COLLATE DATABASE_DEFAULT)이 필요합니다.

기본 PIVOT 예

다음 코드 예 4 개의 행이있는 2 열 테이블을 생성합니다.

결과 집합은 다음과 같습니다.

세 개의 DaysToManufacture로 정의 된 제품이 없습니다.

다음 코드는 값은 열 제목이됩니다. 결과가 NULL 인 경우에도 일 동안 열이 제공됩니다.

결과 집합은 다음과 같습니다. .

복잡한 PIVOT 예

PIVOT가 유용 할 수있는 일반적인 시나리오는 다음과 같습니다. 데이터 요약을 제공하기 위해 교차 분석 보고서를 생성하려는 경우. 예를 들어 AdventureWorks2014 샘플 데이터베이스의 PurchaseOrderHeader 테이블을 쿼리하여 특정 직원이 주문한 구매 주문 수를 확인한다고 가정합니다. 다음 쿼리는 공급 업체별로 정렬 된이 보고서를 제공합니다.

다음은 일부 결과 집합입니다.

이 하위 선택에서 반환 된 결과 문은 EmployeeID 열에서 피벗됩니다.

열은 최종 결과 집합의 필드가됩니다. 따라서 피벗 절에 지정된 각 EmployeeID 번호에 대한 열이 있습니다.이 경우 직원 250, 251, 256, 257260. div id = “c36dcf6b3b”>

열은 값 열의 역할을하며 최종 출력에서 반환 된 열인 그룹화 열이 그룹화됩니다.이 경우 그룹화 열은 COUNT 함수입니다. PurchaseOrderID 열에 나타나는 null 값이

각 직원에 대해.

중요

집계 함수가 PIVOT와 함께 사용되는 경우 , 집계를 계산할 때 값 열에 null 값이 있는지는 고려되지 않습니다.

UNPIVOT 예

UNPIVOT는 열을 행으로 회전하여 PIVOT의 거의 역 동작을 수행합니다. 이전 예에서 생성 된 테이블이 데이터베이스에 pvt로 저장되고 열 식별자 Emp1,

, Emp3, Emp4Emp5 특정 공급 업체에 해당하는 행 값으로. 따라서 두 개의 추가 열을 식별해야합니다.회전하는 열 값 (Emp1, Emp2, …)이 포함될 열은 Employee, 회전중인 열 아래에 현재 존재하는 값을 저장할 열을 Orders라고합니다. 이러한 열은 pivot_column 및 value_column에 해당합니다. , 각각 Transact-SQL 정의에 있습니다. 쿼리는 다음과 같습니다.

여기에 부분 결과 집합이 있습니다.

참고 UNPIVOTPIVOT의 정반대가 아닙니다. PIVOT는 집계를 수행하고 가능한 여러 행을 출력의 단일 행으로 병합합니다. UNPIVOT는 행이 병합 되었기 때문에 원래 테이블 반환 식 결과를 재현하지 않습니다. 또한 UNPIVOT 입력의 null 값이 사라집니다. 값이 사라지면 PIVOT 작업 이전에 입력에 원래 null 값이 있었을 수 있습니다.

Sales.vSalesPersonSalesByFiscalYears보기는 PIVOT를 사용하여 각 회계 연도에 대한 각 영업 사원의 총 매출을 반환합니다. SQL Server Management Studio에서보기를 스크립팅하려면 , 개체 탐색기에서 AdventureWorks2012 데이터베이스의보기 폴더 아래에서보기를 찾습니다.보기 이름을 마우스 오른쪽 단추로 클릭 한 다음 스크립트보기를 선택합니다.

참고 항목

FROM (Transact -SQL)
CASE (Transact-SQL)

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다