YYYYMM DEPT CNT NIGHT_CNT
201501 A 1 0
201501 B 2 0
201502 A 2 0
201503 C 1 1
201503 D 1 1
201507 F 1 1
........
201512 F 1 1
이런데이터가 있습니다.
근데 이걸 부서단위 년도 단위 CNT, NIGHT_CNT 별로 합산해서 보여주고 하는데요.
201501 201502 ..........
DEPT CNT NIGHT_CNT CNT NIGHT_CNT ........
A XXX XXXX XX XXX
B
C
D
....
이런식으로 옆으로 12월까지 뽑아낼수 있을까요?
상단에 년도는 힘들다면 안보여도 됩니다. 엑셀에서 작업하면 됩니다..
항상 도움받으며 감사함을 느끼고 있습니다.
WITH T AS ( SELECT '201501' YYYYMM , 'A' DEPT, 1 CNT , 0 NIGHT_CNT FROM DUAL UNION ALL SELECT '201501' , 'B' , 2 , 0 FROM DUAL UNION ALL SELECT '201502' , 'A' , 2 , 0 FROM DUAL UNION ALL SELECT '201503' , 'C' , 1 , 1 FROM DUAL UNION ALL SELECT '201503' , 'D' , 1 , 1 FROM DUAL UNION ALL SELECT '201507' , 'F' , 1 , 1 FROM DUAL UNION ALL SELECT '201512' , 'F' , 1 , 1 FROM DUAL ) -- GROUP BY - MAX 이용 ( 10G 이하 ) SELECT DEPT , MAX(CASE WHEN MM = 01 THEN CNT END ) AS CNT_01 , MAX(CASE WHEN MM = 01 THEN NIGHT_CNT END) AS NIGHT_CNT_01 , MAX(CASE WHEN MM = 02 THEN CNT END ) AS CNT_02 , MAX(CASE WHEN MM = 02 THEN NIGHT_CNT END) AS NIGHT_CNT_02 , MAX(CASE WHEN MM = 03 THEN CNT END ) AS CNT_03 , MAX(CASE WHEN MM = 03 THEN NIGHT_CNT END) AS NIGHT_CNT_03 , MAX(CASE WHEN MM = 04 THEN CNT END ) AS CNT_04 , MAX(CASE WHEN MM = 04 THEN NIGHT_CNT END) AS NIGHT_CNT_04 , MAX(CASE WHEN MM = 05 THEN CNT END ) AS CNT_05 , MAX(CASE WHEN MM = 05 THEN NIGHT_CNT END) AS NIGHT_CNT_05 , MAX(CASE WHEN MM = 06 THEN CNT END ) AS CNT_06 , MAX(CASE WHEN MM = 06 THEN NIGHT_CNT END) AS NIGHT_CNT_06 , MAX(CASE WHEN MM = 07 THEN CNT END ) AS CNT_07 , MAX(CASE WHEN MM = 07 THEN NIGHT_CNT END) AS NIGHT_CNT_07 , MAX(CASE WHEN MM = 08 THEN CNT END ) AS CNT_08 , MAX(CASE WHEN MM = 08 THEN NIGHT_CNT END) AS NIGHT_CNT_08 , MAX(CASE WHEN MM = 09 THEN CNT END ) AS CNT_09 , MAX(CASE WHEN MM = 09 THEN NIGHT_CNT END) AS NIGHT_CNT_09 , MAX(CASE WHEN MM = 10 THEN CNT END ) AS CNT_10 , MAX(CASE WHEN MM = 10 THEN NIGHT_CNT END) AS NIGHT_CNT_10 , MAX(CASE WHEN MM = 11 THEN CNT END ) AS CNT_11 , MAX(CASE WHEN MM = 11 THEN NIGHT_CNT END) AS NIGHT_CNT_11 , MAX(CASE WHEN MM = 12 THEN CNT END ) AS CNT_12 , MAX(CASE WHEN MM = 12 THEN NIGHT_CNT END) AS NIGHT_CNT_12 FROM (SELECT YYYYMM , SUBSTR(YYYYMM,5,2) MM , DEPT , SUM(CNT) CNT , SUM(NIGHT_CNT) NIGHT_CNT FROM T WHERE YYYYMM BETWEEN '201501' AND '201512' GROUP BY YYYYMM , DEPT ) GROUP BY DEPT ORDER BY DEPT -- PIVOT 이용 ( 11G 이상 ) SELECT * FROM (SELECT SUBSTR(YYYYMM,5,2) MM , DEPT , SUM(CNT) CNT , SUM(NIGHT_CNT) NIGHT_CNT FROM T WHERE YYYYMM BETWEEN '201501' AND '201512' GROUP BY YYYYMM , DEPT ) PIVOT ( SUM(CNT) CNT, SUM(NIGHT_CNT) NIGHT_CNT FOR MM IN ( '01' , '02' , '03' , '04' , '05' , '06' , '07' , '08' , '09' , '10' , '11' , '12' ))