[ Oracle - PIVOT 함수 - 컬럼2개인 경우 ]

 

1. 정의 : 매장별, 월별 이익금, 매출액 조회(2014.01 ~ 2014.06)

  - 참고 : 1. PIVOT 년월 에  컬럼을 기술하지 않은 경우
           2. PIVOT 컬럼이 두 개 인 경우
           3. SUM() 한 후 컬럼을 지정 (이때 지정하지 않으면  오류 발생)

 


WITH
 SALE_DATA AS
    ( 
SELECT DECODE(MOD(ROWNUM, 3), 0, '강남점', 1, '역삼점', 2, '평촌점') AS SHOP_NM
           , 
TO_CHAR(ADD_MONTHS(TO_DATE('201401', 'YYYYMM'), ROUND(dbms_random.value(0,5),0)), 'YYYYMM') AS SALE_YM
           , 
ROUND(dbms_random.value(   1, 5000),0) AS PROFIT_AMT
           , 
ROUND(dbms_random.value(5000,10000),0) AS SALE_AMT
        FROM DUAL
      
CONNECT  BY LEVEL <= 25 )
SELECT *
  
FROM (
        
SELECT SHOP_NM
             , SALE_YM
             , PROFIT_AMT
          
FROM SALE_DATA
        )
PIVOT (SUM(PROFIT_AMT)   AS PT_AMT, SUM(SALE_AMT) AS SA_AMT   -- <-- 이곳에 컬럼 지정
                       FOR
 SALE_YM IN ('201401'               -- <-- 이곳에 컬럼을 지정 하지 않은 경우
                                     , '201402'
                                     , '201403'
                                     , '201404'
                                     , '201405'
                                     , '201406'

                                     )
      );
 

결과


결과 컬럼이 : 년월 과 AS 후 컬럼이 결합되어  이익금컬럼과  매출액컬럼이 쌍으로 해서 반복되어 나온다..

                

 


  

2. 정의 : 매장별, 월별 이익금, 매출액 조회(2014.01 ~ 2014.06)

  - 참고 : 1. PIVOT 년월 에  컬럼을 기술 한 경우
           2. PIVOT 컬럼이 두 개 인 경우
           3. SUM() 한 후 컬럼을 지정 (이때 지정하지 않으면  오류 발생)

 


WITH
 SALE_DATA AS
    ( 
SELECT DECODE(MOD(ROWNUM, 3), 0, '강남점', 1, '역삼점', 2, '평촌점') AS SHOP_NM
           , 
TO_CHAR(ADD_MONTHS(TO_DATE('201401', 'YYYYMM'), ROUND(dbms_random.value(0,5),0)), 'YYYYMM') AS SALE_YM
           , 
ROUND(dbms_random.value(   1, 5000),0) AS PROFIT_AMT
           , 
ROUND(dbms_random.value(5000,10000),0) AS SALE_AMT
        FROM DUAL
      
CONNECT  BY LEVEL <= 25 )
SELECT *
  
FROM (
        
SELECT SHOP_NM
             , SALE_YM
             , PROFIT_AMT
             , SALE_AMT
          
FROM SALE_DATA
        )
PIVOT (SUM(PROFIT_AMT)   AS PT_AMT, SUM(SALE_AMT) AS SA_AMT   -- <-- 이곳에 컬럼 지정
                       FOR
 SALE_YM IN ('201401' AS IDX1       -- <-- 이곳에 컬럼 지정
                                     , '201402'
 AS IDX2
                                     , '201403'
 AS IDX3
                                     , '201404'
 AS IDX4
                                     , '201405'
 AS IDX5
                                     , '201406'
 AS IDX6
                                     )
      );
 

결과
결과 컬럼이 : 년월 후의 AS 컬럼과  SUM() 후 AS컬럼이 결합되어  
              이익금컬럼과  매출액컬럼이 쌍으로 해서 반복되어 나온다..
            
 

 


  

Posted by 농부지기
,