sql >> Databasteknik >  >> RDS >> Oracle

LISTAGG alternativ i Oracle 10g

Testa att använda XMLAGG så här:

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;

Om du behöver sammanlänkningen i en viss ordning, säg ökande ordning av SiteId och lägg sedan till 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:

Om du vill visa resultat för alla de personer som är tilldelade webbplats 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. Var kan man använda mysql_real_escape_string för att förhindra SQL-injektion?

  2. Uppdatera en kolumn i samma tabell om det finns dubbletter av poster

  3. Kommandoraden MySQL-fråga exporterar utdata till filen fungerar inte i Windows

  4. Kodningsfel i PHP-genererad XML-fil