안녕하세요.. 하루종일 안풀리는 쿼리문 있어서 질문 남깁니다..
아래같은 데이터가 있다고하면
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;
어떻게 해결해야 좋을까요?
CONNECT BY LEVEL < n 를 이용한 행 복제 방식은
dual 처럼 1건만 있는 자료에 적용하는 방법입니다.
여러건의 자료에 직접적으로 적용시키면 엄청나게 뻥튀기 됩니다.
http://gurubee.net/article/55635