sql >> Database >  >> RDS >> Oracle

LISTAGG alternatief in Oracle 10g

Probeer XMLAGG . te gebruiken zoals dit:

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;

Als je de aaneenschakeling in een bepaalde volgorde nodig hebt, zeg oplopende volgorde van SiteId, voeg dan een order by toe clausule in de 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;

BEWERKEN:

Als u het resultaat wilt weergeven voor al die mensen die zijn toegewezen aan site 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. Wat is het equivalent van Oracle's REF CURSOR in MySQL?

  2. MySQL-replicatie voor hoge beschikbaarheid

  3. Gegevensprovider van Crystal Reports bijwerken

  4. REAL datatype in PLSQL