MSSQL PIVOT(피벗), UNPIVOT 함수 – 행을 열로 변환하는 방법
MS SQL에서는 행 결괏값을 열로 변환하기 위해서 PIVOT(피벗), UNPIVOT 함수를 제공합니다. 많이 사용하지는 않지만 간혹 필요할 때가 있습니다. 만약 행 결괏값을 열로 변환하기 위해서 PIVOT 함수를 사용하지 않으면 복잡한 쿼리문으로 처리를 해야 되겠죠.
그럼 간단한 예제로 PIVOT 함수, UNPIVOT 함수에 대해서 알아보죠.
◎ 포스트 기준 – Microsoft SQL Server 2019, SSMS 18.11
1. 구문 (Microsoft 기술 문서)
▶ 사용법
SELECT 컬럼, [열로 변환시킬 행 목록]
FROM 테이블
PIVOT ( 집계 함수(집계열) FOR 피벗대상컬럼 IN ([열로 변환시킬 행 목록])
2. 사용 예제
▶ 샘플 데이터
1. PIVOT 사용 예제 1)
-- PIVOT 예제1) 학생별, 학기별, 총점 및 평균 점수 구하기 샘플
SELECT NAME,
TERM,
[국어],
[영어],
[수학],
([국어] + [영어] + [수학]) AS '총점',
CAST(([국어] + [영어] + [수학]) / 3 AS SMALLINT) AS '평균점수'
FROM BS_DEMO_PIVOT_2
PIVOT ( SUM(SCORE)
FOR SUBJECT IN ([국어], [영어], [수학])
) AS PVT
ORDER BY 1, 2
▶ 샘플 예제에서는 결괏값이 하나이기 때문에 집계 함수는 어떤 함수를 사용해도 됩니다. (SUM, AVG, MAX, MIN)
2. PIVOT 사용 예제 2)
-- PIVOT 예제2) 학생별 평균 점수 구하기
SELECT NAME,
[국어],
[영어],
[수학],
CAST(([국어] + [영어] + [수학]) / 3 AS SMALLINT) AS '평균점수'
FROM
(SELECT NAME, SUBJECT, SCORE
FROM BS_DEMO_PIVOT_2) AS TB
PIVOT
( AVG(SCORE)
FOR SUBJECT IN ([국어], [영어], [수학])
) AS PVT
▶ 평균값을 구하기 위해서 AVG 함수를 사용
3. UNPIVOT 사용 예제 3)
-- UNPIVOT 예제3)
SELECT NAME, TERM, SUBJECT, SCORE
FROM
(SELECT NAME, TERM, [국어], [영어], [수학]
FROM BS_DEMO_PIVOT_3) PVT
UNPIVOT
( SCORE
FOR SUBJECT IN ([국어], [영어], [수학])
) AS UNPVT
이 글이 도움이 되셨다면 공유를 부탁드립니다. 다음 글에서 뵙겠습니다!