쿼리 부탁드립니다. 0 4 1,128

by 날자~! [SQL Query] [2019.06.28 14:18:11]


현재일(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       

 

 

by 마농 [2019.06.28 15:41:08]
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
;

 


by 날자~! [2019.06.28 15:45:59]

해당 쿼리 결과가 2개의 행으로 나오는데,

1개의 행으로 나오는 쿼리가 필요합니다.

컬럼이 W1. W2, W3, W4, W5 아니라 

전월, 전월주차갯수, 전주_W1. 전주_W2, 전주_W3, 전주_W4, 전주_W5, 당월, 당월주차갯수,당주_W1. 당주_W2, 당주_W3, 당주_W4, 당주_W5

 

위처럼 연결되서 나와야 됩니다.


by 마농 [2019.06.28 16:02:29]
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)
        )
;

 


by 날자~! [2019.06.28 16:06:31]

감사합니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입