오라클 달력쿼리에서 매월 1일 이전의 전월 날짜와 마지막일자 이후의 빈칸에 다음달 날짜가 찍히게 하려고 하는데 도움 좀 주세요 1 2 3,393

by sun [SQL Query] 달력 [2017.02.03 15:32:33]


안녕하세요.. 이곳에서 많은 도움 받고 있고요..

도움 주시는 분들 정말 감사드립니다.

다름 아니라 오라클쿼리로 달력을 만드는데요

아래 쿼리로 했는데요..


select
 WEEKS, 
 sum(decode(D,'1', DAYNUM)) as SUN,
 sum(decode(D,'2', DAYNUM)) as MON,
 sum(decode(D,'3', DAYNUM)) as TUE,
 sum(decode(D,'4', DAYNUM)) as WED,
 sum(decode(D,'5', DAYNUM)) as THU,
 sum(decode(D,'6', DAYNUM)) as FRI,
 sum(decode(D,'7', DAYNUM)) as SAT
 from (
         select YYMM,
                ROWNUM         as DAYNUM,
                to_char(to_date(b.YYMM||lpad(ROWNUM,2,'0'),'YYYYMMDD'), 'D') as D,
                cast(to_char(to_date(b.YYMM||lpad(rownum,2,'0'),'YYYYMMDD'), 'W') as number) +
                decode(sign(cast(to_char(to_date(b.YYMM||lpad(ROWNUM,2,'0'),'YYYYMMDD'), 'D') as NUMBER)
                          - cast(to_char(to_date(b.YYMM||'01','YYYYMMDD'), 'D') as NUMBER)),
                      0, -1, 1, -1, 0) +1 as WEEKS
         from dual cross join (select '201602' as YYMM from dual) b
         connect by level <= to_number(to_char(last_day(to_date(b.YYMM,'YYYYMM')),'DD'))
 )
 group by WEEKS
 order by WEEKS asc;]

월 1일 이전의 날짜는 전월 일자가 찍히고 (희미한 회색)

월 말일 날짜는 다음달 일자가 (희미한 회색)  공란에 찍히게 하고 싶습니다만

머리를 굴려도 안나오네요..

고수님들 부탁 좀 드리겠습니다.

[결과]

WEEKS SUN MON TUE WED THU FRI SAT
1 28 29 31 1 2 3 4
2 5 6 7 8 9 10 11
3 12 13 14 15 16 17 18
4 19 20 21 22 23 24 25
5 26 27 28 1 2 3 4

 

by 마농 [2017.02.03 16:13:50]
SELECT *
  FROM (SELECT CEIL(LEVEL / 7) weeks
             , MOD(LEVEL - 1, 7) + 1 d
             , TO_NUMBER(TO_CHAR(TRUNC(ym, 'd') + LEVEL - 1, 'dd')) dd
          FROM (SELECT TO_DATE('201702', 'yyyymm') ym FROM dual)
         CONNECT BY LEVEL <= NEXT_DAY(LAST_DAY(ym), 1) - TRUNC(ym, 'd')
        )
 PIVOT (MIN(dd) FOR d IN (1 sun, 2 mon, 3 tue, 4 wed, 5 thu, 6 fri, 7 sat))
 ORDER BY weeks
;

 


by sun [2017.02.03 17:08:44]

이렇게까지 응용하실 줄은 몰랐습니다.

'이런 방법도 있구나'.. 정말 소중한 한수 배웁니다.

잘 기억했다가 사용해야겠습니다.

정말 정말 감사합니다. ..

 

PIVOT의 응용부분을 배워서 정말 기쁩니다. 감사합니다.

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