1. 
PIVOT 함수를 이용하여 간단하게 행렬을 변환할 수 있다.
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반 | 100 | 1학년 | 100 | 30 | |
| 1학년 | 2반 | 30 | 2학년 | 80 | 90 | |
| 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학년', 80, 90 
) 
SELECT 학년, 반, 점수 FROM A 
UNPIVOT(점수 FOR 반 IN ([1반], [2반]))AS UNPVT | cs | 
| A | 결과 | |||||
| 학년 | 1반 | 2반 | 학년 | 반 | 점수 | |
| 1학년 | 100 | 30 | 1학년 | 1반 | 100 | |
| 2학년 | 80 | 90 | 1학년 | 2반 | 30 | |
| 2학년 | 1반 | 80 | ||||
| 2학년 | 2반 | 90 | ||||
출처 : http://ggmouse.tistory.com/23

