Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wyeliminuj duplikaty za pomocą funkcji Oracle LITAGG

Ponieważ odpowiedzi, do których prowadzą linki w komentarzu, nie zapewniają mojego smaku rozwiązania, i tak je opublikuję.

Użyję tylko table_b z fikcyjnymi danymi, aby pokazać koncepcję, możesz łatwo dodać swoje dołączenie itp.:

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;

(Pomysł zaczerpnięty z 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 CLOB nie może wstawić więcej niż 4000 znaków?

  2. ORA-00604 ORA-12705

  3. Jak zainstalować Oracle na komputerze Mac

  4. Oracle Database BLOB do InputStream w Javie?

  5. ORACLE Connect by równoważna klauzula w SQL Server