WITH A AS ( SELECT TO_DATE('20150101', 'YYYYMMDD') AS T_DATE, '11' AS A_CD, '1' AS TP_CD, '10' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150102', 'YYYYMMDD') AS T_DATE, '11' AS A_CD, '1' AS TP_CD, '10' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150102', 'YYYYMMDD') AS T_DATE, '11' AS A_CD, '3' AS TP_CD, '10' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150103', 'YYYYMMDD') AS T_DATE, '11' AS A_CD, '3' AS TP_CD, '14' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150201', 'YYYYMMDD') AS T_DATE, '11' AS A_CD, '1' AS TP_CD, '10' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150102', 'YYYYMMDD') AS T_DATE, '21' AS A_CD, '1' AS TP_CD, '10' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150102', 'YYYYMMDD') AS T_DATE, '21' AS A_CD, '1' AS TP_CD, '14' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150102', 'YYYYMMDD') AS T_DATE, '21' AS A_CD, '1' AS TP_CD, '18' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150102', 'YYYYMMDD') AS T_DATE, '21' AS A_CD, '1' AS TP_CD, '12' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150102', 'YYYYMMDD') AS T_DATE, '21' AS A_CD, '1' AS TP_CD, '16' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150102', 'YYYYMMDD') AS T_DATE, '21' AS A_CD, '1' AS TP_CD, '19' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150102', 'YYYYMMDD') AS T_DATE, '21' AS A_CD, '3' AS TP_CD, '10' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150102', 'YYYYMMDD') AS T_DATE, '21' AS A_CD, '3' AS TP_CD, '14' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150202', 'YYYYMMDD') AS T_DATE, '21' AS A_CD, '3' AS TP_CD, '10' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150102', 'YYYYMMDD') AS T_DATE, '22' AS A_CD, '1' AS TP_CD, '12' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150102', 'YYYYMMDD') AS T_DATE, '22' AS A_CD, '3' AS TP_CD, '10' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150102', 'YYYYMMDD') AS T_DATE, '31' AS A_CD, '1' AS TP_CD, '10' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150102', 'YYYYMMDD') AS T_DATE, '31' AS A_CD, '3' AS TP_CD, '10' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150102', 'YYYYMMDD') AS T_DATE, '31' AS A_CD, '4' AS TP_CD, '10' AS SCT_CD, '1' AS QTY FROM DUAL UNION ALL SELECT TO_DATE('20150103', 'YYYYMMDD') AS T_DATE, '31' AS A_CD, '3' AS TP_CD, '14' AS SCT_CD, '1' AS QTY FROM DUAL ) SELECT TO_CHAR(T_DATE, 'YYYYMM') AS YYYYMM, A_CD, TP_CD ,NVL(SUM(DECODE(SCT_CD,'10', QTY)), 0) AS SCT_10 ,NVL(SUM(DECODE(SCT_CD,'14', QTY)), 0) AS SCT_14 ,NVL(SUM(DECODE(SCT_CD,'18', QTY)), 0) AS SCT_18 ,NVL(SUM(DECODE(SCT_CD,'12', QTY)), 0) AS SCT_12 ,NVL(SUM(DECODE(SCT_CD,'16', QTY)), 0) AS SCT_16 ,NVL(SUM(DECODE(SCT_CD,'19', QTY)), 0) AS SCT_19 FROM ( SELECT * FROM A ) GROUP BY TO_CHAR(T_DATE, 'YYYYMM'), A_CD, TP_CD ;
>>>>>>> 현재 결과
YYYYMM A_CD TP_CD SCT_10 SCT_14 SCT_18 SCT_12 SCT_16 SCT_19
201501 11 1 2 0 0 0 0 0
201501 11 3 1 1 0 0 0 0
201501 21 1 1 1 1 1 1 1
201501 21 3 1 1 0 0 0 0
201501 22 1 0 0 0 1 0 0
201501 22 3 1 0 0 0 0 0
201501 31 1 1 0 0 0 0 0
201501 31 3 1 1 0 0 0 0
201501 31 4 1 0 0 0 0 0
201502 11 1 1 0 0 0 0 0
201502 21 3 1 0 0 0 0 0
>>>>>>> 원하는 결과
YYYYMM A_CD TP_CD SCT_10 SCT_14 SCT_18 SCT_12 SCT_16 SCT_19
201501 11 1 2 0 0 0 0 0
201501 11 3 1 1 0 0 0 0
201501 11 4 0 0 0 0 0 0 << 추가
201501 21 1 1 1 1 1 1 1
201501 21 3 1 1 0 0 0 0
201501 21 4 0 0 0 0 0 0 << 추가
201501 22 1 0 0 0 1 0 0
201501 22 3 1 0 0 0 0 0
201501 22 4 0 0 0 0 0 0 << 추가
201501 31 1 1 0 0 0 0 0
201501 31 3 1 1 0 0 0 0
201501 31 4 1 0 0 0 0 0
201502 11 1 1 0 0 0 0 0
201502 11 3 0 0 0 0 0 0 << 추가
201502 11 4 0 0 0 0 0 0 << 추가
201502 21 1 0 0 0 0 0 0 << 추가
201502 21 3 1 0 0 0 0 0
201502 21 4 0 0 0 0 0 0 << 추가
201502 22 1 0 0 0 0 0 0 << 추가
201502 22 3 0 0 0 0 0 0 << 추가
201502 22 4 0 0 0 0 0 0 << 추가
201502 31 1 0 0 0 0 0 0 << 추가
201502 31 3 0 0 0 0 0 0 << 추가
201502 31 4 0 0 0 0 0 0 << 추가
위 원하는 결과로
- 월별
- A_CD (11, 21, 22, 31) 고정
- TP_CD(1, 3, 4) 고정
으로 빠진 부분을 추가하여 나타냈으면 합니다.
고수님들 부탁드립니다.
SELECT c.ym, a.a_cd, b.tp_cd , NVL(sct10, 0) sct10 , NVL(sct14, 0) sct14 , NVL(sct18, 0) sct18 , NVL(sct12, 0) sct12 , NVL(sct16, 0) sct16 , NVL(sct19, 0) sct19 FROM (SELECT '11' a_cd FROM dual UNION ALL SELECT '21' FROM dual UNION ALL SELECT '22' FROM dual UNION ALL SELECT '31' FROM dual ) a CROSS JOIN (SELECT '1' tp_cd FROM dual UNION ALL SELECT '3' FROM dual UNION ALL SELECT '4' FROM dual ) b LEFT OUTER JOIN (SELECT TO_CHAR(t_date, 'yyyymm') ym , a_cd, tp_cd , SUM(DECODE(sct_cd, '10', qty)) sct10 , SUM(DECODE(sct_cd, '14', qty)) sct14 , SUM(DECODE(sct_cd, '18', qty)) sct18 , SUM(DECODE(sct_cd, '12', qty)) sct12 , SUM(DECODE(sct_cd, '16', qty)) sct16 , SUM(DECODE(sct_cd, '19', qty)) sct19 FROM a GROUP BY TO_CHAR(t_date, 'yyyymm'), a_cd, tp_cd ) c PARTITION BY (c.ym) ON a.a_cd = c.a_cd AND b.tp_cd = c.tp_cd ORDER BY c.ym, a.a_cd, b.tp_cd ;