오라클 쿼리로 달력을 만들었는데
시작달과 마지막달을 지정해주고 그 값들중에 홀수 달만 출력, 짝수 달만 출력을 하고 싶은데
에러가 납니다 ㅜ..
시작달과 마지막달까지는 했는데 홀 짝 나오게가 너무 어렵습니다.. 도와주세요 ㅜ
파라미터 세개 넣어서 받으려고 하는데 여기서 너무 막히네요....
-- 홀, 짝
SELECT DECODE(MIN(D_ID),1,Y_ID) 날짜
,MIN(DECODE(W_ID,1,D_ID)) 일
,MAX(DECODE(W_ID,2,D_ID)) 월
,SUM(DECODE(W_ID,3,D_ID)) 화
,MIN(DECODE(W_ID,4,D_ID)) 수
,MIN(DECODE(W_ID,5,D_ID)) 목
,MIN(DECODE(W_ID,6,D_ID)) 금
,MIN(DECODE(W_ID,7,D_ID)) 토
FROM (
SELECT TO_CHAR(TO_DATE(:V_ST,'YYYY-MM') + ROWNUM-1,'YYYY-MM') Y_ID
,EXTRACT(DAY FROM TO_DATE(:V_ST,'YYYY-MM') + ROWNUM-1) D_ID
,TO_CHAR(TO_DATE(:V_ST,'YYYYMM')+ROWNUM-1,'D') W_ID
,TRUNC(TO_DATE(:V_ST,'YYYYMM')+ROWNUM-1,'D') WK_ID
,MOD(TO_CHAR(FIRST_DAY -1 + ROWNUM , 'MM'),2) AS NUM
FROM
(SELECT TRUNC(TO_DATE(:V_ST,'YYYYMM'), 'MM') FIRST_DAY
FROM DUAL)
CONNECT BY LEVEL <= LAST_DAY(TO_DATE(:V_ET,'YYYYMM')) - TO_DATE(:V_ST,'YYYYMM')+1
)
FROM DUAL
WHERE NUM = :NUM
GROUP BY Y_ID, WK_ID
ORDER BY Y_ID, WK_ID;
오류는. 밑에서 4번째 줄 " FROM DUAL " 부분만 빼시면 됩니다.
변수는 한번만 사용하도록 하는게 좋을 듯 합니다.
쿼리를 좀더 간결하게 바꾸시는게 좋을 듯 하네요.
SELECT MIN(DECODE(d_id, 1, y_id)) 연월
, MIN(DECODE(w_id, 1, d_id)) 일
, MIN(DECODE(w_id, 2, d_id)) 월
, MIN(DECODE(w_id, 3, d_id)) 화
, MIN(DECODE(w_id, 4, d_id)) 수
, MIN(DECODE(w_id, 5, d_id)) 목
, MIN(DECODE(w_id, 6, d_id)) 금
, MIN(DECODE(w_id, 7, d_id)) 토
FROM (SELECT TO_CHAR(dt, 'yyyy-mm') y_id
, TO_CHAR(dt, 'fmdd') d_id
, TO_CHAR(dt, 'd') w_id
, TRUNC (dt, 'd') wk_id
FROM (SELECT st + LEVEL - 1 dt
FROM (SELECT TO_DATE(:v_st, 'yyyymm') st
, TO_DATE(:v_et, 'yyyymm') et
FROM dual)
CONNECT BY LEVEL <= LAST_DAY(et) - st + 1
)
WHERE MOD(TO_CHAR(dt, 'mm'), 2) = :v_num
)
GROUP BY y_id, wk_id
ORDER BY y_id, wk_id
;
와!! 진짜 이렇게 깔끔하고 간단하게 되는거였구나...
감사합니다!!!