sql >> Database >  >> RDS >> Oracle

Elimineer duplicaten met de Oracle LISTAGG-functie

Omdat de gelinkte antwoorden in de opmerking niet mijn smaak van oplossing bieden, zal ik het toch posten.

Ik gebruik alleen table_b met dummy-gegevens om het concept te laten zien, kunt u eenvoudig uw lidmaatschap toevoegen, enz.:

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;

(Idee afkomstig van https://forums.oracle.com/forums/thread.jspa?messageID=9634767&tstart=0#9943367)




  1. Verander de Oracle-poort van poort 8080

  2. Wat zijn de 6 belangrijkste componenten van Microsoft Access?

  3. JSON_QUOTE() – Hoe te ontsnappen aan tekens in tekenreeksen die worden gebruikt als JSON-waarden in MySQL

  4. Een DB-koppeling maken tussen twee Oracle-instanties