Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

LISTAGG alternatif di Oracle 10g

Coba gunakan XMLAGG seperti ini:

select
    p.PeopleID,
    rtrim(xmlagg(xmlelement(e, s.SiteName, ',')).extract('//text()').getclobval(), ',')
from people p
join site s on p.SiteID = s.SiteID
group by p.PeopleID;

Jika Anda memerlukan rangkaian dalam urutan tertentu, katakanlah urutan peningkatan SiteId, lalu tambahkan order by klausa dalam xmlagg:

select
    p.PeopleID,
    rtrim(xmlagg(xmlelement(e, s.SiteName, ',')
                   order by s.SiteId).extract('//text()').getclobval(), ',')
from people p
join site s on p.SiteID = s.SiteID
group by p.PeopleID;

EDIT:

Jika Anda ingin menampilkan hasil untuk semua orang yang ditugaskan ke situs 100:

select p.PeopleID,
    rtrim(xmlagg(
                xmlelement(e, s.SiteName, ',') order by s.SiteId
            ).extract('//text()').getclobval(), ',')
from people p
join site s on p.SiteID = s.SiteID
join (
    select distinct PeopleID
    from people
    where siteID = 1
    ) p2 on p.PeopleID = p2.PeopleID
group by p.PeopleID;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Prosedur PL/SQL - terlalu banyak nilai

  2. Menjalankan total grup berulang berdasarkan item berdasarkan waktu di Oracle SQL

  3. Bagaimana saya bisa melihat kueri yang dieksekusi terhadap Oracle?

  4. Bekerja dengan tanggal di Oracle SQL

  5. Dapatkan hasil teratas untuk setiap grup (di Oracle)