공휴일,휴일 구분 문의드립니다. 0 2 4,051

by 굼성 [SQL Query] [2013.05.14 17:11:26]


HOLI 테이블에 데이터는 
DT   WDAY   HDAY
20130501  Y  null
20130502  N  null
20130503  N  null
20130504  Y  null
20130505  Y  Y
20130506  N  null
20130507  N  null
20130508  N  null
20130509  N  null


이런식으로 날짜(DT)와 휴일구분(WDAY) 공휴일 구분(HDAY)이 들어가있습니다.
기본으로 금요일은 휴일로 잡구요
공휴일이 붙은 평일1일 + 휴일은 공휴일로 Y ,N으로 표시하고싶습니다 
예를들면
화요일이 어린이날로 공휴일이면 금토일월화 가 공휴일로 체크가 될수 있도록
또는 화수목 이 추석이면 금토일월화수목금토일 까지 공휴일로... 체크를하고싶은데 잘안되네요..ㅠㅠ
조언 부탁드립니다.
by 마농 [2013.05.14 19:11:39]
WITH t AS
(
SELECT '20130430' dt, 'N' wday, '' hday FROM dual
UNION ALL SELECT '20130501', 'Y', '' FROM dual
UNION ALL SELECT '20130502', 'N', '' FROM dual
UNION ALL SELECT '20130503', 'N', '' FROM dual
UNION ALL SELECT '20130504', 'Y', '' FROM dual
UNION ALL SELECT '20130505', 'Y', 'Y' FROM dual
UNION ALL SELECT '20130506', 'N', '' FROM dual
UNION ALL SELECT '20130507', 'N', '' FROM dual
UNION ALL SELECT '20130508', 'N', '' FROM dual
UNION ALL SELECT '20130509', 'N', '' FROM dual
UNION ALL SELECT '20130510', 'N', '' FROM dual
)
SELECT *
  FROM (SELECT dt, wday, hday, dy
             , CASE WHEN  LAG(yn) OVER(ORDER BY dt) = 'Y'
                     AND LEAD(yn) OVER(ORDER BY dt) = 'Y'
                    THEN 'Y' ELSE yn END yn
          FROM (SELECT dt, wday, hday
                     , TO_CHAR(TO_DATE(dt, 'yyyymmdd'), 'dy') dy
                     , CASE WHEN wday = 'Y'
                              OR hday = 'Y'
                              OR TO_CHAR(TO_DATE(dt, 'yyyymmdd'), 'd') IN ('6','7','1') -- 금토일
                            THEN 'Y' ELSE 'N' END yn 
                  FROM t
                 WHERE dt >= TO_CHAR(TO_DATE(:sdt, 'yyyymmdd')-1, 'yyyymmdd') -- 검색시작일 하루전
                   AND dt <= TO_CHAR(TO_DATE(:edt, 'yyyymmdd')+1, 'yyyymmdd') -- 검색종료일 하루후
                )
        )
 WHERE dt >= :sdt -- 검색시작일
   AND dt <= :edt -- 검색종료일
;

by 굼성 [2013.05.14 20:00:41]

아하..이런방법이 있군요...감사합니다 열심히 공부해야겠네요...

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