Oracle
 sql >> Base de données >  >> RDS >> Oracle

Alternative LISTAGG dans Oracle 10g

Essayez d'utiliser XMLAGG comme ceci :

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;

Si vous avez besoin de la concaténation dans un ordre particulier, dites l'ordre croissant de SiteId, puis ajoutez un order by clause dans le 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;

MODIFIER :

Si vous souhaitez afficher le résultat pour toutes les personnes affectées au 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;