날짜1 | 날짜2 | 차이 |
20171204 | 20171208 | 4 |
20171208 | 20171212 | 3 |
위와 같은 A테이블이 있고,
똑같이 4일차이가 나지만 워킹데이 기준으로 일요일(또는 공휴일)을 제외하고 카운트하고 싶습니다.
테이블은 날짜 테이블이 있습니다.(날짜테이블 B)
날짜 | 휴일구분 |
20171209 | null |
20171210 | 1 |
20171211 | null |
SAS에서는
SELECT 날짜1,
날짜2,
(select count(*) from 테이블B where B.날짜 between A.날짜 and A.날짜1) as 휴일포함,
(select count(*) from 테이블B where B.날짜 between A.날짜 and A.날짜1 and 휴일구분 is null) as 휴일제외
FROM 테이블A
WHERE 날짜2 BETWEEN '20171201' AND '20171231'
GROUP BY 날짜1
날짜2;
이렇게 짜면 위와 테이블 A 의 차이를 구할수 있는데
oracle 에서는 도무지 위와같은 코드로 되질 않습니다.
고수분들 답변 부탁드립니다.
-- 휴가 12-4 ~ 12-8 일이면 5일 아닌가요? WITH TB_VACATION AS ( SELECT 1 ID , '20171204' ST_DT , '20171208' ED_DT , 4 DIFF FROM DUAL UNION ALL SELECT 2 ID , '20171208' ST_DT , '20171212' ED_DT , 3 DIFF FROM DUAL ) , TB_HOLIDAY AS ( /*그냥 만듬*/ SELECT TO_DATE( '20171201' , 'YYYYMMDD' ) + LEVEL - 1 DY , CASE TO_CHAR(TO_DATE( '20171201' , 'YYYYMMDD' ) + LEVEL - 1 ,'D') WHEN '7' THEN '1' WHEN '1' THEN '1' END GB FROM DUAL CONNECT BY LEVEL <= 31 ) SELECT B.ID , MIN(B.ST_DT) ST_DT , MAX(B.ED_DT) ED_DT , COUNT(*) CNT FROM TB_HOLIDAY A , TB_VACATION B WHERE A.DY BETWEEN TO_DATE(B.ST_DT,'YYYYMMDD') AND TO_DATE(B.ED_DT,'YYYYMMDD') AND A.GB IS NULL GROUP BY B.ID