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

Oracleで複数の行を連結してグループ化する

    11gを使用している場合は、LISTAGG関数の使用を検討してください:

    select grp, listagg(name,',') within group( order by name ) 
      from name_table group by grp
    

    sqlFiddle

    upd: そうでない場合は、分析の使用を検討してください:

    select grp,
        ltrim(max(sys_connect_by_path
           (name, ',' )), ',')
            scbp
      from (select name, grp,
                row_number() over
               (partition by grp
                order by name) rn
             from tab
              )
    start with rn = 1
    connect by prior rn = rn-1
    and prior grp = grp
      group by grp
      order by grp
    

    sqlFiddle




    1. SQLServerのパフォーマンスを損なうActivityMonitorを回避する方法

    2. Non-RepeatableReadとPhantomReadの違いは何ですか?

    3. 未定義の関数mysql_connect()

    4. ひねりを加えたHekaton:インメモリTVP –パート3