오라클에서 시작일, 종료일 컬럼을 행으로 변환하고자 합니다. 1 2 1,320

by 궁금한넘 [SQL Query] 컬럼을 행으로 [2022.07.26 16:44:54]


초보자 질문하나만 올리겠습니다.

다음과 같이 시작일과 종료일이 있는 데이터를 행으로 변경할 수 있을까요?

구분    시작일자    종료일자    
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
 

by 우리집아찌 [2022.07.26 17:26:26]
-- 답에만 맞췄습니다.
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
  

 


by 동동동 [2022.07.26 17:37:05]
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 문 재귀호출을 이용해 봤습니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입