반차 중복 쿼리 질문드립니다. 0 1 3,007

by 밸런스 [Oracle 기초] [2024.02.14 15:25:15]


안녕하세요.

휴가 기간 중복 체크를 해야 하는데 머리가 하얗습니다.. 도움주시면 감사하겠습니다!

 

WITH VACA AS
(
SELECT '20240217' start_date, 'N' pm_half_yn, '20240218' end_date, 'Y' am_half_yn FROM dual
)
SELECT count(*) dup_cnt
FROM   VACA
WHERE  start_date <= '20240220'
and    end_date >= '20240218'

 

기존에는 VACA 테이블에 이렇게 있으면 기간으로만 체크했었는데 반차까지 체크를 해서 중복카운트가 나오지 않았으면 합니다.!

 db : 20240217 반차없음 ~ 20240218 오전반차(am_half_yn = 'Y')

입력 : 20240218 오후반차(pm_half_yn = 'Y') ~ 20240220 반차없음

이 경우에는 중복 카운트가 안 나왔으면 하는데 어떻게 해야할까요..?

by 마농 [2024.02.15 11:43:53]
WITH vaca AS
(
SELECT '20240217' start_date, 'N' pm_half_yn, '20240218' end_date, 'Y' am_half_yn FROM dual
)
SELECT COUNT(*) dup_cnt
  FROM vaca
     , (SELECT '20240218' sdt, 'Y' pyn
             , '20240220' edt, 'N' ayn
          FROM dual
        )
 WHERE start_date <= edt
   AND end_date   >= sdt
   AND start_date || DECODE(pm_half_yn, 'N', 'A', 'P') <= edt || DECODE(ayn, 'Y', 'A', 'P')
   AND end_date   || DECODE(am_half_yn, 'Y', 'A', 'P') >= sdt || DECODE(pyn, 'N', 'A', 'P')
;

 

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