sql >> Databáze >  >> RDS >> Oracle

Alternativa LISTAGG v Oracle 10g

Zkuste použít XMLAGG takhle:

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;

Pokud potřebujete zřetězení v určitém pořadí, řekněme rostoucí pořadí SiteId, pak přidejte order by klauzule v 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;

UPRAVIT:

Pokud chcete zobrazit výsledek pro všechny lidi, kteří jsou přiřazeni k webu 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. Přejmenování indexů pomocí procedury sp_rename

  2. Hledejte v MySQL pomocí Spaces

  3. Návrh databáze:systém zásob a prodeje?

  4. Algoritmus řazení SQL Server GUID. Proč?