sql >> Database teknologi >  >> RDS >> Oracle

LISTAGG alternativ i Oracle 10g

Prøv at bruge XMLAGG sådan her:

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;

Hvis du har brug for sammenkædningen i en bestemt rækkefølge, siger stigende rækkefølge af SiteId, og tilføj derefter en order by klausul i 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:

Hvis du vil have vist resultat for alle de personer, der er tildelt websted 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. Hvordan indsætter jeg i en tabel fra en anden tabel ved at matche på værdier?

  2. Opret forbindelse til Oracle DB via JDBC-driver

  3. MAX() Funktion i PostgreSQL

  4. Oprettelse af en lagret procedure:indstilling af tegnsæt og sortering