Oracle
 sql >> база данни >  >> RDS >> Oracle

Премахнете дубликатите с помощта на функцията Oracle LISTAGG

Тъй като свързаните отговори в коментара не предоставят моето решение, все пак ще го публикувам.

Ще използвам само 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Инсталиране на примерни схеми за Oracle 12c с помощта на помощника за конфигуриране на база данни

  2. Oracle Joins - Сравнение между конвенционален синтаксис VS ANSI синтаксис

  3. Поправка:„главната прецизност на интервала е твърде малка“ в Oracle Database

  4. Функция SIGN() в Oracle

  5. Заявката, включваща външни присъединявания, се държи по различен начин в Oracle 12c