MSSQL Column을 Row로 Row를 Column로 변환 (Pivot, Unpivot)

빈번하게 많이 생기는 일은 아니지만 가끔 통계자료를 추출 할 경우 칼럼을 로우 형태로 작업해야하고 또는 로우를 칼럼의 형태로 작업해서 장표를 만들어야 하는 경우가 종종 있습니다.


이럴때 사용하는 것이 MSSQL에서 제공하는 Pivot와 Unpivot 입니다.
하여 오늘은 MSSQL Column을 Row로 Row를 Column로 변환 (Pivot, Unpivot)에 대해서 알아보도록 하겠습니다.





▶ Row를 Column으로 변환 (PIVOT)

SELECT 컬럼명 FROM 테이블명
PIVOT ([집계함수] ([집계 컬럼명]) FOR [대상 컬럼명] IN ([컬럼이 될 값])) AS 피벗테이블명
=> 집계 함수 : SUM(합계), AVG(평균), COUNT(개수), MAX(최대), MIN(최소)

예)
DECLARE @SUBJECT VARCHAR(100);
WITH PIVOT_TABLE AS
(
 SELECT '1반' AS 반정보, '국어' AS 과목, 90 AS 점수
 UNION ALL
 SELECT '1반' AS 반정보, '수학' AS 과목, 80 AS 점수
 UNION ALL
 SELECT '2반' AS 반정보, '국어' AS 과목, 70 AS 점수
 UNION ALL
 SELECT '2반' AS 반정보, '수학' AS 과목, 60 AS 점수
 UNION ALL
 SELECT '3반' AS 반정보, '영어' AS 과목, 50 AS 점수
)
SELECT * FROM PIVOT_TABLE
PIVOT (SUM(점수) FOR 과목 IN ([국어], [수학], [영어])) AS PVT





▶ Column를 Row으로 변환 (UNPIVOT)

SELECT 컬럼명 FROM 테이블명
UNPIVOT ([집계될 데이터의 컬럼명] FOR [UNPIVOT할 데이터의 컬럼명] IN ([UNPIVOT할 컬럼명])) AS 언피벗테이블명

예)
WITH UNPIVOT_TABLE AS
(
 SELECT '1반' AS 반정보, 90 AS '국어', 80 AS '수학'
 UNION ALL
 SELECT '2반' AS 반정보, 70 AS '국어', 60 AS '수학'
 UNION ALL
 SELECT '3반' AS 반정보, 50 AS '국어', 40 AS '수학'
)
SELECT UNPVT.[반정보], [과목], [점수] FROM UNPIVOT_TABLE
UNPIVOT ([점수] FOR [과목] IN ([국어], [수학])) AS UNPVT




이상으로 MSSQL Column을 Row로 Row를 Column로 변환 (Pivot, Unpivot)에 대해서 알아보았습니다.
오늘도 행복하고 행운이 만땅인 하루되시길 기원 합니다. 끝까지 읽어주셔서 감사합니다.^^

댓글

이 블로그의 인기 게시물

껌 떼는 법 (완벽 제거)

석청 효능 및 석청 부작용 알아보기

인성검사 팁 (인성검사 합격)