로그 테이블 A가 있습니다.
date_time, code1 , code2, code3, cnt 이렇게 컬럼이 있을때
date_time 이 '20141210' 이렇게 yyyymmdd 형식의 날짜 문자가 들어가있으며
각 코드별 날짜별로 cnt 합계를 구하면
20141201 , 1, 1, 0, 100
20141201, 2, 1, 0, 150
20141201 1, 2, 0, 200
20141201 2, 1, 1, 100
20141202 , 1, 1, 0, 110
20141202, 2, 1, 0, 120
20141203 1, 2, 0, 180
20141204 1, 2, 0, 150
20141204, 2, 1, 1, 140
위처럼 코드별로 날짜가 있는것도 있고 없는것도 있게 됩니다.
구현하고 싶은건
code1 , code2, code3, 20141201, 20141202, 20141203....., sum
1, 1, 0, 100, 110, 0, 0, ...., 210
2, 1, 0, 150, 120, 0, 0, .....,270
1, 2, 0, 200, 0, 180, ....., 380
이런식으로 날짜가 가로로 출력되고 범위에 해당하는 날짜의 카운트와 합계를 구하려고 합니다.
혹시 이게 쿼리로 안되는지요?
날짜는 검색 옵션이라 늘 유동적입니다.
프로그래밍화 해야 하는지
아니면 각 날짜에 해당하는 카운트를 각각 따로 인라인뷰로 쿼리를 해야 하는지요?
WITH t AS ( SELECT '20141201' dt, 1 cd1, 1 cd2, 0 cd3, 100 cnt FROM dual UNION ALL SELECT '20141201', 2, 1, 0, 150 FROM dual UNION ALL SELECT '20141201', 1, 2, 0, 200 FROM dual UNION ALL SELECT '20141201', 2, 1, 1, 100 FROM dual UNION ALL SELECT '20141202', 1, 1, 0, 110 FROM dual UNION ALL SELECT '20141202', 2, 1, 0, 120 FROM dual UNION ALL SELECT '20141203', 1, 2, 0, 180 FROM dual UNION ALL SELECT '20141204', 1, 2, 0, 150 FROM dual UNION ALL SELECT '20141204', 2, 1, 1, 140 FROM dual ) SELECT cd1, cd2, cd3 , NVL(SUM(DECODE(SUBSTR(dt, 7, 2), '01', cnt)), 0) "01" , NVL(SUM(DECODE(SUBSTR(dt, 7, 2), '02', cnt)), 0) "02" , NVL(SUM(DECODE(SUBSTR(dt, 7, 2), '03', cnt)), 0) "03" , NVL(SUM(DECODE(SUBSTR(dt, 7, 2), '04', cnt)), 0) "04" , NVL(SUM(DECODE(SUBSTR(dt, 7, 2), '05', cnt)), 0) "05" -- 중략 -- , NVL(SUM(DECODE(SUBSTR(dt, 7, 2), '31', cnt)), 0) "31" , SUM(cnt) tot FROM t WHERE dt LIKE '201412%' GROUP BY cd1, cd2, cd3 ORDER BY cd1, cd2, cd3 ;
다이나믹 SQL 강좌 : http://www.gurubee.net/lecture/1720