초보자 질문하나만 올리겠습니다.
다음과 같이 시작일과 종료일이 있는 데이터를 행으로 변경할 수 있을까요?
구분 시작일자 종료일자
1 2022-07-01 2022-07-04
2 2022-07-01 2022-07-01
======= 열로 변환 ==========
구분 시작일자 종료일자
1 2022-07-01 2022-07-04
1 2022-07-02 2022-07-04
1 2022-07-03 2022-07-04
1 2022-07-04 2022-07-04
2 2022-07-01 2022-07-01
select '1' 구분, '2022-07-01' 시작일자, '2022-07-04' 종료일자 from dual
union all
select '2' 구분, '2022-07-01' 시작일자, '2022-07-01' 종료일자 from dual
-- 답에만 맞췄습니다. WITH T AS ( select '1' gb, '2022-07-01' st_dt, '2022-07-04' ed_dt from dual union all select '2' gb, '2022-07-01' st_dt, '2022-07-01' ed_dt from dual ) SELECT GB , TO_CHAR(TO_DATE(ST_DT,'YYYY-MM-DD') + LV - 1 , 'YYYY-MM-DD' ) ST_DT , ED_DT FROM T A , ( SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= (SELECT MAX(TO_DATE(ED_DT,'YYYY-MM-DD') - TO_DATE(ST_DT,'YYYY-MM-DD')) + 1 TOT_CNT FROM T )) WHERE TO_DATE(ED_DT,'YYYY-MM-DD') - TO_DATE(ST_DT,'YYYY-MM-DD') + 1 >= LV ORDER BY GB , ED_DT , LV
WITH a AS ( select '1' 구분, '2022-07-01' 시작일자, '2022-07-04' 종료일자 from dual union all select '2' 구분, '2022-07-01' 시작일자, '2022-07-01' 종료일자 from dual ) , b (구분, 시작일자, 종료일자, dt) AS ( SELECT 구분, 시작일자, 종료일자, 시작일자 AS dt FROM a UNION ALL SELECT 구분, 시작일자, 종료일자, TO_CHAR(TO_DATE(dt, 'YYYY-MM-DD') + 1, 'YYYY-MM-DD') AS dt FROM b WHERE TO_DATE(dt, 'YYYY-MM-DD') < TO_DATE(종료일자, 'YYYY-MM-DD') ) SELECT 구분, dt AS 시작일자, 종료일자 FROM b ORDER BY 구분, 시작일자; 예전에 답글로 올라온 with 문 재귀호출을 이용해 봤습니다.