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