1로우에 from ~ to로 a, b 필드가 있습니다.
a필드: 20180101 b: 20180103
근데 실제 값은 누가봐도 1일 2 일 3일까지 휴가 인데 실제 값은 각각 a필드: 20180101 b: 20180103 이고 20180102는 없는 값이죠...
이 값을 얻어 내는 쿼리가 찾아보니 아래와 같은 쿼리가 있더라고요
조회해 보면
20180101
20180102
20180103
SELECT TO_CHAR(YMD,'yyyymmdd')
FROM(
SELECT TO_DATE ('20180101', 'YYYYMMDD')+(LEVEL - 1) YMD
FROM DUAL
CONNECT BY TO_DATE ('20180101', 'YYYYMMDD')+(LEVEL-1) <=TO_DATE ('20180103', 'YYYYMMDD'))
원하는 답은 나오기는 했는데 로우 데이터를 저 값과 합쳐 쓰려니 대략 난감인데 간단한 함수라든지 중간값 얻어 내는 쿼리 있을까요?
근데 달력마스터와 조인해서 걸어야 하는데 매우 난감하네요....
from to 같은 값일때는 어떻게 값을 생성해서 합쳐 데이터를 보여 주면 좋을까요 간결하게...
너무 어렵네요 몇일째 고민하는데 하수라 손가락이 안 움직입니다 ㅠ
-- 기존 달력 테이블이 있다면 그냥 조인하면 됩니다. WITH data_t AS ( SELECT '20190101' sdt, '20190103' edt FROM dual ) , calendar_t AS ( SELECT '20190101' dt FROM dual UNION ALL SELECT '20190102' FROM dual UNION ALL SELECT '20190103' FROM dual UNION ALL SELECT '20190104' FROM dual ) SELECT a.sdt , a.edt , b.dt FROM data_t a , calendar_t b WHERE b.dt BETWEEN a.sdt AND a.edt ;
아래와 같은 from to 휴가테이블 구조 인데
from / to
20170101 / 20170103
20170101 / 20170105
20170312 / 20170318
이걸 달력테이블 PK 값이 일자인 값에 조인을 걸어 사용하려다 보니 안되고 있습니다
달력테이블 PK 일자
20110101
20110102
20110103
20110104...
근데 이게 from to 사이의 중간 값을 구한다고해도
from, to 이 값들을 어떻게 달력 테이블 날자에 조인을 걸어 일자별 데이터를 추출할지 고민입니다..
현재 하려는것을 아우룩처럼 휴가자 달력을 보고 싶다고 해서 개발진행 중인 건 입니다...
이번 주말도 컴퓨터 앞에서 지내야겠군요
너무 답답해서 올려 봤습니다....
WITH data_t AS ( SELECT 1 id, '20170101' sdt, '20170103' edt FROM dual UNION ALL SELECT 2, '20170101', '20170105' FROM dual UNION ALL SELECT 2, '20170312', '20170318' FROM dual ) , calendar_t AS ( SELECT TO_CHAR(dt + LEVEL - 1, 'yyyymmdd') dt FROM (SELECT TO_DATE('201701', 'yyyymm') dt FROM dual) CONNECT BY LEVEL <= 99 ) SELECT a.id , a.sdt , a.edt , b.dt FROM data_t a , calendar_t b WHERE b.dt BETWEEN a.sdt AND a.edt ORDER BY a.id, a.sdt, b.dt ;