sql >> データベース >  >> RDS >> Oracle

私のSQL結果を複製する方法は?

    相関階層クエリを使用できます:

    SELECT t.id, r.COLUMN_VALUE, t.cnt
    FROM   table_name t
           CROSS JOIN
           TABLE(
             CAST(
               MULTISET(
                 SELECT LEVEL
                 FROM   DUAL
                 CONNECT BY LEVEL <= t.cnt
               )
               AS SYS.ODCINUMBERLIST
             )
           ) r;
    

    または再帰的なサブクエリ因数分解句:

    WITH row_generator ( id, lvl, cnt ) AS (
      SELECT id, 1, cnt
      FROM   table_name
    UNION ALL
      SELECT id, lvl + 1, cnt
      FROM   row_generator
      WHERE  lvl < cnt
    )
    SELECT *
    FROM   row_generator
    ORDER BY id, lvl
    

    したがって、テストデータの場合:

    CREATE TABLE table_name ( ID, cnt ) AS
    SELECT 'A',  12 FROM DUAL UNION ALL
    SELECT 'B', 138 FROM DUAL
    

    これらのソリューションは両方とも次のように出力されます。

    ID | COLUMN_VALUE | CNT
    :- | -----------: | --:
    A  |            1 |  12
    A  |            2 |  12
    A  |            3 |  12
              ...
    A  |           10 |  12
    A  |           11 |  12
    A  |           12 |  12
    B  |            1 | 138
    B  |            2 | 138
    B  |            3 | 138
    B  |            4 | 138
              ...
    B  |          136 | 138
    B  |          137 | 138
    B  |          138 | 138
    

    db<>ここでフィドル




    1. SQL-行から枯渇した値を減算する

    2. テーブルとしてのPostgres9.4jsonb配列

    3. DATEDIFF()はSQL Serverで間違った結果を返しますか?これを読む。

    4. どのデータマスキング機能を使用する必要がありますか?