컬럼사이의 날짜를 행으로 조회하는 방법 0 5 1,121

by lgxj20 [2016.07.08 16:01:20]


테이블에 내역을 조회했을때

row 1 -- > '20160908' , '20160909'

row 2 -- > '20160921' , '20160923'

 

이렇게 나왔을때(row 는 v개가 나올수 있음)

 

row 1,row2   각각 두날짜 사의이 일자를 행으로 표현하려면 어떻게 해야 할까요?

row 1 -- > 20160908

              20160909

row2 -- > 20160921

             20160922

             20160923

 

row 가 한개일때는

   SELECT sdt + (LEVEL-1)
   FROM (SELECT TO_DATE('20160921', 'yyyymmDD') sdt,
               TO_DATE('20160923', 'yyyymmDD') edt
          FROM dual) CONNECT BY LEVEL <= EDT+1 -SDT

이렇게 하면 되겠는데 row가 여러건 나올때는 어떻게 해야 할까요?

by jkson [2016.07.08 16:49:32]
SELECT DISTINCT SDT + (LV - 1) DT
  FROM (SELECT TO_DATE('20160921', 'yyyymmDD') SDT, TO_DATE('20160925', 'yyyymmDD') EDT FROM DUAL
        UNION ALL
        SELECT TO_DATE('20160927', 'yyyymmDD') SDT, TO_DATE('20161003', 'yyyymmDD') EDT FROM DUAL)
     , (SELECT LEVEL LV
          FROM DUAL
       CONNECT BY LEVEL < 10000)
 WHERE LV <= EDT + 1 - SDT
 ORDER BY DT 

 


by lgxj20 [2016.07.08 16:52:31]

이렇게 하면 ROW가 N가 되면 불가능 한거 아닌가요??

동적으로 UNION ALL을 해줘야 하는거 아닌가요?


by jkson [2016.07.08 17:08:38]

두 개의 row가 있다는 가정하에 test 데이터로 2건 생성한 겁니다. from 절에 사용하시는 table 지정하시면 되겠죠. 10000일 이상 조회하지 않으실 거 같아 10000으로 지정했구요.


by 마농 [2016.07.08 16:51:48]

by 랑에1 [2016.07.08 17:04:11]
WITH T AS (
SELECT TO_DATE('20160908', 'yyyymmDD') sdt, TO_DATE('20160909', 'yyyymmDD') edt FROM dual UNION ALL 
SELECT TO_DATE('20160921', 'yyyymmDD') sdt, TO_DATE('20160923', 'yyyymmDD') edt FROM dual
)


SELECT rn, MIN(sdt) OVER(PARTITION BY rn ORDER BY lv) + lv -1  dt
FROM  (SELECT T.*, rownum rn FROM T), (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 1000)
WHERE lv <= edt - sdt + 1
ORDER BY rn, lv

점수용..

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입