PIVOT, UNPIVOT (행렬 변환)

1. 
PIVOT 함수를 이용하여 간단하게 행렬을 변환할 수 있다.
--. Test_Table







--. 소스
SELECT [001], [002], [003] FROM (     SELECT TestCode, TestName     FROM Test_Table WITH (NOLOCK) ) AS A PIVOT (     MIN(TestName)     FOR TestCode IN ([001], [002], [003]) ) A
--. 결과

출처 : http://acpi.tistory.com/100



1. 
PIVOT

행과 열 변환

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



예제)

1
2
3
4
5
6
7
8
9
WITH A AS
(
    SELECT '1학년' AS '학년''1반' AS '반'100 AS '점수'
    UNION ALL SELECT '1학년''2반'30
    UNION ALL SELECT '2학년''1반'80
    UNION ALL SELECT '2학년''2반'90
)
SELECT * FROM A
PIVOT(SUM(점수) FOR 반 IN ([1반],[2반])) AS PVT
cs

A
결과
학년점수학년1반2반
1학년1반1001학년10030
1학년2반302학년8090
2학년1반80
2학년2반90






UNPIVOT

PIVOT의 반대

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



예제)

1
2
3
4
5
6
7
WITH A AS
(
    SELECT '1학년' AS '학년'100 AS '1반'30 AS '2반'
    UNION ALL SELECT '2학년'8090
)
SELECT 학년, 반, 점수 FROM A
UNPIVOT(점수 FOR 반 IN ([1반], [2반]))AS UNPVT
cs

A결과
학년1반2반학년점수
1학년100301학년1반100
2학년80901학년2반30
2학년1반80
2학년2반90



출처 : http://ggmouse.tistory.com/23 
Previous
Next Post »