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

列でグループ化された単一のテーブルからのセット

    この問題は、実際には、リンクした質問への回答よりも単純に見えます。これは、その問題に対する優れた解決策です。それでも、これは同じ階層クエリを使用し、connect by

    priorityの場合 は常に数列の連続であり、これは機能します

    SELECT t.grp, level, ltrim(SYS_CONNECT_BY_PATH(state,','),',')   as "set"  
       from  t 
       start with priority = 1
     connect by   priority = prior priority + 1
                and grp = prior grp
    

    ただし、それが常に当てはまるとは限らない場合は、row_number()が必要になります。 優先順位(連続した整数である必要はありません)に基づいてシーケンスを定義するには

    with t2 AS
    ( 
      select t.*, row_number() 
            over ( partition by grp order by priority) as rn from t
    )
    SELECT t2.grp, ltrim(SYS_CONNECT_BY_PATH(state,','),',')   as "set"
       from  t2 
       start with priority = 1
     connect by   rn = prior rn + 1
                and grp = prior grp
    

    デモ



    1. OracleでORDERを使用してINSERT

    2. SQLビューを介して複数のテーブルにデータを挿入する

    3. インストール後にmysqlでフェデレーションエンジンを有効にするにはどうすればよいですか?

    4. MacOS上のObjective-CからのOracleデータを接続して処理します