안녕하세요
각 구분코드 별로 맨처음 시작횟수부터 마지막 끝횟수까지 연속된 숫자로 각각 행을 만들고 싶습니다.
CONNECT BY 로 해보고 있는데 원하는 결과가 잘 안나오네요.
도움 요청 드립니다.
원본데이터
구분코드 | 횟수_시작 | 횟수_끝 | 지급률 |
AA | 1 | 3 | 100 |
AA | 4 | 4 | 90 |
AA | 5 | 5 | 80 |
AA | 6 | 10 | 40 |
BB | 1 | 1 | 100 |
BB | 2 | 2 | 90 |
BB | 3 | 7 | 50 |
BB | 8 | 8 | 40 |
BB | 9 | 15 | 20 |
만들고 싶은 결과
구분코드 | 횟수 | 지급률 |
AA | 1 | 100 |
AA | 2 | 100 |
AA | 3 | 100 |
AA | 4 | 90 |
AA | 5 | 80 |
AA | 6 | 40 |
AA | 7 | 40 |
AA | 8 | 40 |
AA | 9 | 40 |
AA | 10 | 40 |
BB | 1 | 100 |
BB | 2 | 90 |
BB | 3 | 50 |
BB | 4 | 50 |
BB | 5 | 50 |
BB | 6 | 50 |
BB | 7 | 50 |
BB | 8 | 40 |
BB | 9 | 20 |
BB | 10 | 20 |
BB | 11 | 20 |
BB | 12 | 20 |
BB | 13 | 20 |
BB | 14 | 20 |
BB | 15 | 20 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | WITH t AS ( SELECT 'AA' cd, 1 s_cnt, 3 e_cnt, 100 rat FROM dual UNION ALL SELECT 'AA' , 4, 4, 90 FROM dual UNION ALL SELECT 'AA' , 5, 5, 80 FROM dual UNION ALL SELECT 'AA' , 6, 10, 40 FROM dual UNION ALL SELECT 'BB' , 1, 1, 100 FROM dual UNION ALL SELECT 'BB' , 2, 2, 90 FROM dual UNION ALL SELECT 'BB' , 3, 7, 50 FROM dual UNION ALL SELECT 'BB' , 8, 8, 40 FROM dual UNION ALL SELECT 'BB' , 9, 15, 20 FROM dual ) SELECT * FROM t , ( SELECT LEVEL cnt FROM dual CONNECT BY LEVEL <= 99) WHERE cnt BETWEEN s_cnt AND e_cnt ORDER BY cd, cnt ; |