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 ;