I have a table on a Oracle DB with two columns. I would like to see every row repeated as many times as the number stored in the second column. The table looks like this:
with src (col1, col2) as (
SELECT 'a', 2 FROM DUAL UNION ALL
SELECT 'b', 3 FROM DUAL UNION ALL
SELECT 'c', 1 FROM DUAL
)
SELECT
src.*
FROM
src
JOIN (
SELECT LEVEL val FROM DUAL
CONNECT BY LEVEL <= (SELECT MAX(col2) FROM src)
) gen ON gen.val <= src.COL2
ORDER BY
src.col1
or in Oracle 12 is possible to use
with src (col1, col2) as (
SELECT 'a', 2 FROM DUAL UNION ALL
SELECT 'b', 3 FROM DUAL UNION ALL
SELECT 'c', 1 FROM DUAL
)
SELECT
src.*
FROM
src
CROSS APPLY (SELECT NULL FROM DUAL CONNECT BY LEVEL <= src.col2)
ORDER BY
col1;