FROM-PIVOT 및 UNPIVOT 사용
- 2019 년 10 월 14 일
- 읽는 데 5 분
-
- V
- c
- M
- i
- M
-
+7
적용 대상 : SQL Server (지원되는 모든 버전) Azure SQL 데이터베이스 Azure SQL 관리 형 인스턴스 Azure Synapse Analytics 병렬 데이터웨어 하우스
PIVOT
및 UNPIVOT
관계 연산자를 사용하여 테이블 반환 식을 다른 테이블로 변경합니다. 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
, 257
및 260
. div id = “c36dcf6b3b”>
열은 값 열의 역할을하며 최종 출력에서 반환 된 열인 그룹화 열이 그룹화됩니다.이 경우 그룹화 열은 COUNT
함수입니다. PurchaseOrderID
열에 나타나는 null 값이
각 직원에 대해.
중요
집계 함수가 PIVOT
와 함께 사용되는 경우 , 집계를 계산할 때 값 열에 null 값이 있는지는 고려되지 않습니다.
UNPIVOT 예
UNPIVOT
는 열을 행으로 회전하여 PIVOT
의 거의 역 동작을 수행합니다. 이전 예에서 생성 된 테이블이 데이터베이스에 pvt
로 저장되고 열 식별자 Emp1
,
, Emp3
, Emp4
및 Emp5
특정 공급 업체에 해당하는 행 값으로. 따라서 두 개의 추가 열을 식별해야합니다.회전하는 열 값 (Emp1
, Emp2
, …)이 포함될 열은 Employee
, 회전중인 열 아래에 현재 존재하는 값을 저장할 열을 Orders
라고합니다. 이러한 열은 pivot_column 및 value_column에 해당합니다. , 각각 Transact-SQL 정의에 있습니다. 쿼리는 다음과 같습니다.
여기에 부분 결과 집합이 있습니다.
참고 UNPIVOT
는 PIVOT
의 정반대가 아닙니다. PIVOT
는 집계를 수행하고 가능한 여러 행을 출력의 단일 행으로 병합합니다. UNPIVOT
는 행이 병합 되었기 때문에 원래 테이블 반환 식 결과를 재현하지 않습니다. 또한 UNPIVOT
입력의 null 값이 사라집니다. 값이 사라지면 PIVOT
작업 이전에 입력에 원래 null 값이 있었을 수 있습니다.
Sales.vSalesPersonSalesByFiscalYears
보기는 PIVOT
를 사용하여 각 회계 연도에 대한 각 영업 사원의 총 매출을 반환합니다. SQL Server Management Studio에서보기를 스크립팅하려면 , 개체 탐색기에서 AdventureWorks2012 데이터베이스의보기 폴더 아래에서보기를 찾습니다.보기 이름을 마우스 오른쪽 단추로 클릭 한 다음 스크립트보기를 선택합니다.
참고 항목
FROM (Transact -SQL)
CASE (Transact-SQL)