Search

2018년 3월 11일 일요일

[Database] [Oracle] PIVOT과 UNPIVOT 함수 사용하여 데이터 형태 변환하기

#1. 들어가기
우리는 종종 GROUP BY를 통해 데이터를 집계하곤 한다.
보통 여러 컬럼에 구분된 값을 집계할 때 CASE문을 사용하는데, PIVOT 함수를 활용하는 방법을 알아보자.
또한, 잘 알려져있지는 않지만 UNPIVOT 함수를 이용해 그 역의 형태로 되돌리는 방법도 알아보자.


#2. PIVOT

 -> 

좌측(12rows) 형태에서 우측(4rows) 형태로 변환하려면, 아래와 같은 쿼리를 이용한다.
SELECT * FROM TMP
PIVOT (
    SUM(CNT) FOR MON IN (
        'M01' AS MON01
       ,'M02' AS MON02
       ,'M03' AS MON03
    )
)
ORDER BY ID
;


#3. UNPIVOT

  -> 

앞선 예제와는 반대로, 좌측(4rows) 형태에서 우측(12rows) 형태로 변환하려면, 아래와 같은 쿼리를 이용한다.
SELECT * FROM TMP
UNPIVOT (
    CNT FOR MON IN (
        MON01 AS 'M01'
       ,MON02 AS 'M02'
       ,MON03 AS 'M03'
    )
)
ORDER BY ID, MON
;


댓글 없음:

댓글 쓰기