How to unfold the results of an Oracle query based on the value of a column

后端 未结 4 1391
小蘑菇
小蘑菇 2020-12-04 00:58

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:

4条回答
  •  时光取名叫无心
    2020-12-04 01:38

    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;
    

提交回复
热议问题