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 |
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
;
이렇게까지 응용하실 줄은 몰랐습니다.
'이런 방법도 있구나'.. 정말 소중한 한수 배웁니다.
잘 기억했다가 사용해야겠습니다.
정말 정말 감사합니다. ..
PIVOT의 응용부분을 배워서 정말 기쁩니다. 감사합니다.