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

OracleLISTAGG関数を使用して重複を排除します

    コメント内のリンクされた回答は私の解決策の味を提供していないので、とにかくそれを投稿します。

    table_bのみを使用します コンセプトを示すダミーデータを使用すると、結合などを簡単に追加できます。

    with table_b as ( -- dummy data
     select 'name'||mod(level,3) name
            ,mod(level,3) id
       from dual
      connect by level < 10
     union all
     select 'name'||mod(level,2) name
            ,mod(level,3) id
       from dual
      connect by level < 10
    )
    select id
          ,RTRIM (
                  XMLAGG (
                          XMLELEMENT (E,XMLATTRIBUTES (name|| ',' AS "Seg")
                          )
                         ORDER BY name ASC
                  ).EXTRACT ('./E[not(@Seg = preceding-sibling::E/@Seg)]/@Seg'),
                  ','
                 ) AS "Product Name"
           ,LISTAGG(b.name, ',') WITHIN GROUP (ORDER BY b.name) AS "Product Name with dups"
      from table_b b
    group by id;
    

    (https://forums.oracle.com/forums/thread.jspa?messageID=9634767&tstart=0#9943367から取得したアイデア)




    1. 有用なOracleAppsプリンタークエリのトップ9

    2. 映画館予約システムのデータベースモデルを設計する方法

    3. AWSでMySQLまたはMariaDBを管理するためのRDSとEC2の比較

    4. どちらの結合構文が優れていますか?