티스토리 뷰

오라클 11g부터 pivot 기능을 제공합니다

기존 이하버전에서는 decode를 이용하여 로우를 컬럼으로 변경하는 작업을 하였습니다

pivot 기능을 이용하면 decode의 복잡하고 비직관적인 코드를 조금 더 직관적으로 작성할 수 있습니다.

아쉬운 접은 pivot 기능을 사용하더라도 pivot을 할 컬럼을 미리 정의를 해 놓아야 한다는 점이다.

상황에 맞게 pivot를 사용할지 decode를 사용할지 결정해서 사용하면 될꺼 같습니다.


아래는 예저는 Pivot을 이용하여 20141월부터 12월까지 월별 요일건수 산출하는 쿼리입니다.




[PIVOT을 이용한 예제]


--가상테이블(2014년 모든일자)

WITH TEMP_TABLE AS (

SELECT (TO_DATE('20140101','YYYYMMDD') + LEVEL-1) DTE

   FROM DUAL

    CONNECT BY LEVEL-1 <= TO_DATE('20141231','YYYYMMDD') - TO_DATE('20140101','YYYYMMDD')

)

 

--월별 요일건수 (PIVOT 이용)

SELECT *

   FROM (

  SELECT to_char(DTE,'MM') || '' MON

              , decode(to_char(DTE,'D'),'1','','2','','3','','4','','5','','6','','7','') WEEK

              , DTE

     FROM TEMP_TABLE

              )

PIVOT

(

COUNT(DTE)

FOR WEEK IN ('','','','','','','')

)

    ORDER BY MON




[DECODE를 이용한 쿼리]


--가상테이블(2014년 모든일자)

WITH TEMP_TABLE AS (

SELECT (TO_DATE('20140101','YYYYMMDD') + LEVEL-1) DTE

FROM DUAL

 CONNECT BY LEVEL-1 <= TO_DATE('20141231','YYYYMMDD') - TO_DATE('20140101','YYYYMMDD')

)

 

   --월별 요일건수 (DECODE 이용)

   SELECT to_char(DTE,'MM') || '' MON

, sum(decode(to_char(DTE,'D'),'1',1,0)) ""

, sum(decode(to_char(DTE,'D'),'2',1,0)) ""

, sum(decode(to_char(DTE,'D'),'3',1,0)) ""

, sum(decode(to_char(DTE,'D'),'4',1,0)) ""

, sum(decode(to_char(DTE,'D'),'5',1,0)) ""

, sum(decode(to_char(DTE,'D'),'6',1,0)) ""

, sum(decode(to_char(DTE,'D'),'7',1,0)) ""

      FROM TEMP_TABLE

   GROUP BY to_char(DTE,'MM')

    ORDER BY MON




댓글
댓글쓰기 폼