SELECT LEVEL,M.*
FROM
(
SELECT 'A' AS COMP
,'N223' ST
,'76' CO
,'105' SI
,3 QTY
FROM DUAL
UNION ALL
SELECT 'A' AS COMP
,'N224' ST
,'76' CO
,'100' SI
,1 QTY
FROM DUAL
UNION ALL
SELECT 'A' AS COMP
,'N225' ST
,'76' CO
,'095' SI
,2 QTY
FROM DUAL
) M
CONNECT BY LEVEL < QTY
ORDER BY ST,CO,SI;
제가 원하는건 QTY 수만큼만 데이타가 조회되는걸 알려고합니다.
결과 :
COMP | ST | CO | SI | QTY |
A | N223 | 76 | 105 | 3 |
A | N223 | 76 | 105 | 3 |
A | N223 | 76 | 105 | 3 |
A | N224 | 76 | 100 | 1 |
A | N225 | 76 | 95 | 2 |
A | N225 | 76 | 95 | 2 |
어떤식으로 해야될까요?
with tmp as ( SELECT 'A' AS COMP,'N223' ST,'76' CO,'105' SI,3 QTY FROM DUAL UNION ALL SELECT 'A' AS COMP ,'N224' ST ,'76' CO,'100' SI,1 QTY FROM DUAL UNION ALL SELECT 'A' AS COMP ,'N225' ST ,'76' CO ,'095' SI,2 QTY from DUAL) select a.* from tmp a, ( select level as no from dual connect by level <= (select max(qty) from tmp) ) b where a.qty >= b.no order by a.st;
데이터 뻥튀기(행복사)에 주의하세요. 데이터가 많을 경우 장애가 발생할 수 있습니다.
a 테이블 row 갯수 * a 테이블 max(qty) 만큼 데이터가 생성됩니다.
예 ) a 테이블 row 갯수 = 10,000개 / a 테이블 max(qty) = 10,000개 인 경우 데이터가 1억 개 생성된 뒤, 필터링되어 나옵니다.