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

内部結合の行を列挙する

    行番号を生成するために、ダミーテーブルへの内部結合や分析関数は必要ありません。次のように、テーブル自体でconnect by(および対応するレベル関数)を使用できます。

    WITH tst_dim_ban_selected AS (SELECT 1 ban_key, 'a' cust_fullname, 3 n FROM dual UNION ALL
                                  SELECT 2 ban_key, 'b' cust_fullname, 4 n FROM dual)
    -- end of mimicking your table with data in it. See SQL below
    SELECT db.ban_key,
           db.cust_fullname,
           LEVEL row_num
    FROM   tst_dim_ban_selected db
    CONNECT BY LEVEL <= db.n
               AND PRIOR db.ban_key = db.ban_key -- assuming this is the primary key
               AND PRIOR sys_guid() IS NOT NULL;
    
       BAN_KEY CUST_FULLNAME    ROW_NUM
    ---------- ------------- ----------
             1 a                      1
             1 a                      2
             1 a                      3
             2 b                      1
             2 b                      2
             2 b                      3
             2 b                      4
    

    テーブルの主キーにban_key以外の列がある場合は、それらがconnectby句のprior <column> = <column>のリストに含まれていることを確認する必要があります。 s。これは、connect byが各行を一意に識別できるようにするためです。つまり、その行のすぐ上でループし、他の行はループしません。 PRIOR sys_guid() IS NOT NULL ループによる接続が発生しないようにするために必要です。



    1. エンティティフレームワーク6とオラクル

    2. Postgresに向けた取り組み-XL9.5

    3. MySQL行から先頭と末尾の引用をトリミングするにはどうすればよいですか?

    4. PostgreSQLがシリーズを間違った方法で組み合わせるのはなぜですか?