Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Loại bỏ các bản sao bằng cách sử dụng hàm LISTAGG của Oracle

Vì các câu trả lời được liên kết trong nhận xét không cung cấp cho tôi giải pháp phù hợp, nên tôi vẫn sẽ đăng nó.

Tôi sẽ chỉ sử dụng table_b với dữ liệu giả để hiển thị khái niệm, bạn có thể dễ dàng thêm tham gia của mình, v.v.:

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;

(Ý tưởng được lấy từ 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. cx_Oracle và Xử lý ngoại lệ - Các phương pháp hay?

  2. Tùy chọn định dạng SQLcl (Oracle)

  3. GROUP BY hoạt động như thế nào?

  4. Kết quả định dạng trừ thời gian

  5. Một chuyến đi qua GIMR