PIVOT


열을 행으로 ROW 형태의 데이터를 COLUMN 형태로 보여주는 쿼리이다.

컬럼의 값을 기준으로 새로운 컬럼을 도출하여 다양한 집계함수를 적용 가능하다.






UNPIVOT


행을 열으로 COLUMN 형태를 ROW 형태로 보여주는 쿼리이다.

Pivot 된 결과를 되돌리는 기능이 아닌 순수하게 Pivot 에 대응 되는 개념이다.

Pivot 된 결과를 Unpivot 을 쓴다고 해도 원래의 Pivot 전 테이블로 돌아갈 수 없다.

컬럼을 특정 컬럼의 값으로 대응하여 해당 컬럼의 값은 별도의 컬럼에 표시하여 나열한다.

기능적으로 Pivot 과 반대되는 개념이다.






1
2
3
4
5
6
7
8
9
10
11
12
-- PIVOT 사용 전
WITH T AS
(
 SELECT CHR(LEVEL + 64) C
      , LEVEL V
   FROM DUAL
connect by LEVEL <= 10
)
 
SELECT C
     , TO_CHAR(V) V
  FROM T;
cs


출력 결과





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- PIVOT 사용 후
WITH T AS
(
 SELECT CHR(LEVEL + 64) C
      , LEVEL V
   FROM DUAL
CONNECT BY LEVEL <= 10
)
SELECT *
  FROM (
        SELECT C
             , V
          FROM T
       )
 PIVOT ( MIN(C) FOR V IN(1 V1, 2 V2, 3 V3, 4 V4, 5 V5, 6 V6, 7 V7, 8 V8, 9 V9, 10 V10))
cs

출력 결과




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- UNPIVOT 사용 후
WITH T AS
(
 SELECT CHR(LEVEL + 64) C
      , LEVEL V
   FROM DUAL
connect by LEVEL <= 10
)
 SELECT *
   FROM (
         SELECT C
              , TO_CHAR(V) V
           FROM T    
        )
UNPIVOT ( V FOR GB2 IN (C AS 1, V AS 2) )
cs

출력 결과



1
2
3
4
5
6
7
8
9
10
11
12
-- PIVOT
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 '1월' 월, '김성현' 성명, 200 급여 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월'))
cs


출력 결과




1
2
3
4
5
6
7
-- UNPIVOT
WITH T AS( 
    SELECT '홍길동' 성명, 140 일월, 120 이월 FROM DUAL UNION ALL
    SELECT '김철수' 성명, 210 일월, 220 이월 FROM DUAL
)
SELECT * FROM T
UNPIVOT(급여 FOR 월 IN(일월, 이월))
cs


출력 결과



+ Recent posts