오라클 PIVOT UNPIVOT
11g버젼부터 지원
행을 열로, 열을 행으로 바꿔줌
PIVOT : 행을 열로
WITH T AS (
SELECT 1 C, 'A' V FROM DUAL UNION ALL
SELECT 2 C, 'B' V FROM DUAL UNION ALL
SELECT 3 C, 'C' V FROM DUAL
)
SELECT * FROM T
PIVOT ( MIN(C) FOR V IN ('A' A, 'B' B, 'C' C) )
C V
---
1 A
2 B
3 C
=>
A B C
-----
1 2 3
PIVOT ( MIN(C) FOR V IN ('A' A, 'B' B, 'C' C) )
-> 컬럼 V중에서 A,B,C의 값을 갖고있는 ROW가 헤더가 되고, MIN(C)가 값이된다.
UNPIVOT : 열을 행으로
WITH T AS (
SELECT 1 A, 2 B, 3 C FROM DUAL
)
SELECT * FROM T
UNPIVOT ( C FOR V IN (A,B,C) )
A B C
-----
1 2 3
=>
C V
---
1 A
2 B
3 C
UNPIVOT ( C FOR V IN (A,B,C) )
-> C컬럼에 A,B,C에 해당하는 값을 출력
, A,B,C의 컬럼은 V라는 컬럼으로 출력
PIVOT 2번째예
사원별로 월별 급여를 가로로 변환
WITH T AS (
SELECT '1월' 월, '홍길동' 성명, 110 급여 FROM DUAL UNION ALL
SELECT '1월' 월, '홍길동' 성명, 30 급여 FROM DUAL UNION ALL
SELECT '1월' 월, '김철수' 성명, 210 급여 FROM DUAL UNION ALL
SELECT '2월' 월, '홍길동' 성명, 120 급여 FROM DUAL UNION ALL
SELECT '2월' 월, '김철수' 성명, 220 급여 FROM DUAL
)
SELECT * FROM T
PIVOT ( SUM(급여) FOR 월 IN ('1월', '2월') )
월 성명 급여
--------------
1월 홍길동 110
1월 홍길동 30
1월 김철수 210
2월 홍길동 120
2월 김철수 220
=>
성명 '1월' '2월'
------------------
홍길동 140 120
김철수 210 220
UNPIVOT 2번째예
사원별로 월별 급여를 세로로 변환
WITH T AS (
SELECT '홍길동' 성명, 140 일월, 120 이월 FROM DUAL UNION ALL
SELECT '김철수' 성명, 210 일월, 220 이월 FROM DUAL
)
SELECT * FROM T
UNPIVOT ( 급여 FOR 월 IN (일월, 이월) )
성명 일월 이월
----------------
홍길동 140 120
김철수 210 220
=>
성명 월 급여
------------------
홍길동 일월 140
홍길동 이월 120
김철수 일월 210
김철수 이월 220
'Programming > Oracle' 카테고리의 다른 글
오라클 with (0) | 2016.05.10 |
---|---|
Oracle Table Function (0) | 2016.04.28 |
오라클 월별누적합계 구하기 (0) | 2015.12.01 |
오라클 substr (0) | 2015.11.27 |
오라클 MAX KEEP (0) | 2015.11.25 |