소스테이블의 value값을 이용하여 loop문을 사용해야 합니다.
source ex) name set
a01 103
이렇게 소스 테이블에 들어 있을경우
case when set > 100 then
select '100','100이상',100 as value into value1, value2,value3
when set > 50 then
select '50','50이상',50 into value1, value2,value3
when set > 1 then
select '1','1이상',1 into value1, value2,value3
end case;
set = set - value
이런식으로 해서 소스는 한개의 row인데 타겟에 적재되는 값은 여러 row가 되도록 cursor문을 구현해야 하는데 아무리 해봐도 case loop문이 잘 안되네요
target ex) name set value
a01 100 100이상
a01 1 1이상
고수님들의 도움을 부탁드려요 ^^*
WITH t AS ( SELECT 'a01' cd, 103 v FROM dual ) SELECT cd, v , CASE WHEN LEVEL <= v1 THEN 100 WHEN LEVEL <= v1 + v2 THEN 50 ELSE 1 END x , CASE WHEN LEVEL <= v1 THEN '100이상' WHEN LEVEL <= v1 + v2 THEN '50이상' ELSE '1이상' END y FROM (SELECT cd, v , FLOOR(v / 100) v1 , FLOOR(MOD(v, 100) / 50) v2 , MOD(v, 50) v3 FROM t ) CONNECT BY LEVEL <= v1 + v2 + v3 ;
WITH t AS ( SELECT 'a01' cd, 103 v FROM dual UNION ALL SELECT 'a02', 252 FROM dual ) SELECT cd, v , CASE WHEN lv <= v1 THEN 100 WHEN lv <= v1 + v2 THEN 50 ELSE 1 END x , CASE WHEN lv <= v1 THEN '100이상' WHEN lv <= v1 + v2 THEN '50이상' ELSE '1이상' END y FROM (SELECT cd, v , FLOOR(v / 100) v1 , FLOOR(MOD(v, 100) / 50) v2 , MOD(v, 50) v3 FROM t ) , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 99) WHERE lv <= v1 + v2 + v3 ORDER BY cd, lv ;