현재일(2019/06/28) 기준,
아래 처럼 월당 5주차씩 있다고 가정하고
전월 부터 당월 까지의 주차를 하나의 행으로 표현하고 싶습니다.
(월 주차 개수는 실제 해당 월의 주차 갯수)
전월 | 전월주차개수 | 전월 1주차 | 전월 2주차 | 전월 3주차 | 전월 4주차 | 전월 5주차 | 연결
-----------------------------------------------------------------------------------------------------------
201905 | 5 | 201918 | 201919 | 201920 | 201921 | 201922
당월 | 당월주차개수 | 당월 1주차 | 당월 2주차 | 당월 3주차 | 당월 4주차 | 당월 5주차 |
-----------------------------------------------------------------------------------------------------------
201906 | 4 | 201923 | 201924 | 201925 | 201926 | NULL
SELECT ym , COUNT(*) cnt , MIN(DECODE(w, 1, iw)) w1 , MIN(DECODE(w, 2, iw)) w2 , MIN(DECODE(w, 3, iw)) w3 , MIN(DECODE(w, 4, iw)) w4 , MIN(DECODE(w, 5, iw)) w5 FROM (SELECT TO_CHAR(dt, 'yyyymm') ym , TO_CHAR(dt, 'iyyy-iw') iw , ROW_NUMBER() OVER(PARTITION BY TO_CHAR(dt, 'yyyymm') ORDER BY dt) w FROM (SELECT dt + (LEVEL-1)*7 dt FROM (SELECT NEXT_DAY(TRUNC(ADD_MONTHS(sysdate, -1), 'mm')-1, 5) dt FROM dual) CONNECT BY LEVEL <= 10 ) WHERE dt <= LAST_DAY(sysdate) ) GROUP BY ym ORDER BY ym ;
SELECT MIN(ym) b_ym , COUNT(DECODE(x , 'b', 1)) b_cnt , MIN(DECODE(x||w, 'b1', iw)) b_w1 , MIN(DECODE(x||w, 'b2', iw)) b_w2 , MIN(DECODE(x||w, 'b3', iw)) b_w3 , MIN(DECODE(x||w, 'b4', iw)) b_w4 , MIN(DECODE(x||w, 'b5', iw)) b_w5 , MAX(ym) c_ym , COUNT(DECODE(x, 'c', 1)) c_cnt , MIN(DECODE(x||w, 'c1', iw)) c_w1 , MIN(DECODE(x||w, 'c2', iw)) c_w2 , MIN(DECODE(x||w, 'c3', iw)) c_w3 , MIN(DECODE(x||w, 'c4', iw)) c_w4 , MIN(DECODE(x||w, 'c5', iw)) c_w5 FROM (SELECT TO_CHAR(dt, 'yyyymm') ym , TO_CHAR(dt, 'iyyy-iw') iw , ROW_NUMBER() OVER(PARTITION BY TO_CHAR(dt, 'yyyymm') ORDER BY dt) w , DECODE(TO_CHAR(dt, 'yyyymm'), TO_CHAR(sysdate, 'yyyymm'), 'c', 'b') x FROM (SELECT dt + (LEVEL-1)*7 dt FROM (SELECT NEXT_DAY(TRUNC(ADD_MONTHS(sysdate, -1), 'mm')-1, 5) dt FROM dual) CONNECT BY LEVEL <= 10 ) WHERE dt <= LAST_DAY(sysdate) ) ;