오라클 쿼리 질문있습니다. 0 3 828

by minrule [2021.05.25 17:45:02]


 

안녕하세요.. 하루종일 안풀리는 쿼리문 있어서 질문 남깁니다..

아래같은 데이터가 있다고하면

KEYCOL1 KEYCOL2 KEYCOL3 COL1 COL2
A A' A'' 2 3
B B' B'' 3 6
C C' C'' 4 6


아래의 표처럼 FROMDATE부터 TODATE까지 ROW별로 나눠서 표시하려고합니다. 

KEYCOL1 KEYCOL2 KEYCOL3 COL
A A' A'' 2
A A' A'' 3
B B' B'' 3
B B' B'' 4
B B' B'' 5
B B' B'' 6
C C' C'' 4
C C' C'' 5
C C' C'' 6

 

아래와 같은 쿼리로 시도해봤는데...

제 의도와는 다르게 데이터가 복사가 됩니다..

WITH W_DATA AS
(
SELECT 'A' AS KEYCOL1 , 'A-' AS KEYCOL2 , 'A--' AS KEYCOL3 , 2 AS COL1 , 3 AS COL2 FROM DUAL
 UNION ALL
SELECT 'B' AS KEYCOL1 , 'B-' AS KEYCOL2 , 'B--' AS KEYCOL3,  3 , 6 FROM DUAL
 UNION ALL
SELECT 'C' AS KEYCOL1 , 'C-' AS KEYCOL2 , 'C--' AS KEYCOL3,  4 , 6 FROM DUAL
)
  SELECT KEYCOL1
       , KEYCOL2
       , KEYCOL3
--       , COL1
--       , COL2
--       , LEVEL
       , COL1 + LEVEL AS COL
    FROM W_DATA
 CONNECT BY LEVEL <= COL2 - COL1
 ORDER BY KEYCOL1, KEYCOL2, KEYCOL3 , COL1+LEVEL;

어떻게 해결해야 좋을까요? 

by 뉴비디비 [2021.05.25 22:08:21]
SELECT 
    KEYCOL1, KEYCOL2, KEYCOL3, COL_LV
FROM 
    W_DATA
JOIN ( SELECT LEVEL COL_LV FROM DUAL CONNECT BY LEVEL <= 10 ) AA -- 10은 적당히 큰값으로 조절
   ON AA.COL_LV BETWEEN W_DATA.COL1 AND W_DATA.COL2
ORDER BY KEYCOL1, KEYCOL2, KEYCOL3, COL_LV

 


by minrule [2021.05.26 09:21:45]

덕분에 해결했습니다~ 답변 정말 감사합니다. :)


by 마농 [2021.05.27 09:44:15]

CONNECT BY LEVEL < n 를 이용한 행 복제 방식은
dual 처럼 1건만 있는 자료에 적용하는 방법입니다.
여러건의 자료에 직접적으로 적용시키면 엄청나게 뻥튀기 됩니다.
http://gurubee.net/article/55635

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