본문 바로가기

DB/오라클

오라클 피벗( Oracle Pivot ) 기능



Pivot : 열을 행으로 변환해주는 내장함수 ( 오라클 11g이상버전에서 사용가능 )

쿼리를 동적으로 90도 돌려서 출력해야할때가 있다. 

즉, 아래와같이 세로로 나열된 쿼리의 특정컬럼을 가로로 나열 하고 싶을때 사용 한다.



<  원본 Data  >     
ID     tDate            tCode   tResult
100   2013-02-01  L201   59
020   2012-03-01  L203   18
020   2012-03-01  LL77   Negative
100   2011-03-19  L711   Positive
100   2011-03-19  L203   23
921   2010-09-27  L781   478
=================================
SELECT  ID, tDate, tCode, tResult
FROM EMP T
=================================



<  Pivot 결과  > 
ID    tDate               L201   L203   LL77       L711     ...  <= tCode
020  2013-03-01               18       Negative
100  2013-02-01     59
100  2011-03-19               23                      Positive
==========================================================
SELECT * FROM 
(    
     SELECT  ID, tDate, tCode, tResult
     FROM EMP T   
)
Pivot
(
     max(tResult)
     For  tCode in ('L201', 'L203', 'LL77', 'L711',  ... )
)



그룹함수로 묶어주는기능을함( SUM, COUNT 등의 함수로도 사용가능 )
FOR tCode in  (...) 부분은 고정적으로 명시 해 줄수 밖에없는데 
이를 조회되는 tCode에 따라 가변적으로 나오게 하고싶다면 XML을 이용하여 동적 피벗팅을해야함.
=========================================================





ex2)
-- PIVOT 절에 2개 이상의 집계함수를 사용할 수 있다.
SELECT *
  FROM
     (
          SELECT PRODID, YMD, CYMD
          FROM TABLE_NAME
          WHERE PRODID IN('A', 'B', 'C') AND YMD >= '20150101' AND YMD <= '20151231'
     )
   PIVOT
     (
               COUNT(*) AS PUR_CNT, COUNT(CYMD) AS CNL_CNT
               FOR PRODID IN ('A','B','C')
          
     )
 
 
 
YMD      A_PUR_CNT    A_CNL_CNT    B_PUR_CNT    B_CNL_CNT   C_PUR_CNT     C_CNL_CNT
-------- ------------ ------------ ------------ ------------ ------------ ------------
20151214          227            0           10            0           20           1
20151215          440            0           20            0           30           0
20151216          468            2            9            0            5           3





'DB > 오라클' 카테고리의 다른 글

오라클 분석함수  (0) 2019.04.05
오라클 구조  (0) 2019.04.03
오라클객체( 시퀀스, 뷰, 인덱스 ) + 트리거, 사용자와권한 , 롤  (0) 2019.04.03
오라클 시퀀스(sequence)  (0) 2019.04.03
오라클 트랜잭션  (0) 2019.04.03