안녕하세요 부족한 실력으로 고수님들의 도움을 받고자 합니다. ^^;
LINE_PLAN 기존의 다른 컬럼은 생략 한 상태이며 시작일자를 종료일자까지 하루씩 증가시키면서 나머지 컬럼은 같은 값을 보여줘야 합니다. 제가 해결 못하고 있는 문제는 ROW를 일자간 일수 만큼 반복을 시켜야 하는데 각 ROW별로 시작일자와 종료일자의 차이가 달라 일정값을 못 넣는 상태입니다.... 이게 쿼리로 가능할까요??
SELECT z.*
FROM(
SELECT a.START_DATE+b.lv
,GREATEST(a.START_DATE+b.lv,a.END_DATE)
,a.opcode
FROM
(SELECT TO_DATE(INPUT_FROM_DATE,'YYYYMMDD') AS START_DATE
, TO_DATE(INPUT_TO_DATE,'YYYYMMDD') AS END_DATE
, OPCODE
FROM LINE_PLAN) A
,(SELECT level lv FROM dual
CONNECT BY level <= INPUT_TO_DATE - INPUT_FROM_DATE를 뺀 일자로 ROW마다 다름 --> 돌아버리겠음 ㅜㅜ) b
)z
ORDER BY 3,1;
제 질문을 읽어 주셔서 감사합니다.
-- host변수에 대한 날짜 타입을 선언해 주셔야 할것 같습니다. WITH line_plan AS ( SELECT '001' opcode,'A' tx FROM DUAL UNION ALL SELECT '002','B' FROM DUAL UNION ALL SELECT '003','C' FROM DUAL UNION ALL SELECT '004','D' FROM DUAL UNION ALL SELECT '005','E' FROM DUAL UNION ALL SELECT '006','F' FROM DUAL ) SELECT s_dt + lv ,GREATEST(s_dt+lv,e_dt) ,opcode,tx FROM ( SELECT TO_DATE(:vs_from_date,'yyyymmdd') AS s_dt ,TO_DATE(:vs_to_date ,'yyyymmdd') AS e_dt ,opcode,tx FROM line_plan ), (SELECT LEVEL lv FROM DUAL CONNECT BY LEVEL <= TO_DATE(:vs_to_date ,'yyyymmdd') - TO_DATE(:vs_from_date,'yyyymmdd'))
인터넷 검색해서 답을 찾았습니다. with tbl_populate(INPUT_FROM_DATE, INPUT_TO_DATE, cnt, ndx, OPCODE) as ( select INPUT_FROM_DATE, INPUT_TO_DATE, TO_DATE(INPUT_TO_DATE ,'yyyymmdd') - TO_DATE(INPUT_FROM_DATE,'yyyymmdd') cnt, 1 , OPCODE from LINE_PLAN union all select t.INPUT_FROM_DATE , t.INPUT_TO_DATE , TO_DATE(t.INPUT_TO_DATE ,'yyyymmdd') - TO_DATE(t.INPUT_FROM_DATE,'yyyymmdd') cnt , tp.ndx + 1 , t.OPCODE from LINE_PLAN t join tbl_populate tp on tp.OPCODE = t.OPCODE and tp.ndx + 1 < TO_DATE(t.INPUT_TO_DATE ,'yyyymmdd') - TO_DATE(t.INPUT_FROM_DATE,'yyyymmdd') ) select OPCODE , TO_DATE(INPUT_FROM_DATE ,'yyyymmdd')+ndx , TO_DATE(INPUT_TO_DATE ,'yyyymmdd') from tbl_populate order by 1,2;