MSSQL PIVOT(피벗), UNPIVOT 함수 - 행을 열로 변환하는 방법

MSSQL PIVOT(피벗), UNPIVOT 함수 – 행을 열로 변환하는 방법

MS SQL에서는 행 결괏값을 열로 변환하기 위해서 PIVOT(피벗), UNPIVOT 함수를 제공합니다. 많이 사용하지는 않지만 간혹 필요할 때가 있습니다. 만약 행 결괏값을 열로 변환하기 위해서 PIVOT 함수를 사용하지 않으면 복잡한 쿼리문으로 처리를 해야 되겠죠. 

그럼 간단한 예제로 PIVOT 함수, UNPIVOT 함수에 대해서 알아보죠.

◎ 포스트 기준 – Microsoft SQL Server 2019, SSMS 18.11

1. 구문 (Microsoft 기술 문서)

구문 (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)

PIVOT 사용 예제 1)


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 함수를 사용

PIVOT 사용 예제 2)


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
UNPIVOT 사용 예제 3)


이 글이 도움이 되셨다면 공유를 부탁드립니다. 다음 글에서 뵙겠습니다!

위로 스크롤