Programming/Oracle2015. 12. 9. 11:23


오라클 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
Posted by jvvj