Oracle
 sql >> база данни >  >> RDS >> Oracle

LISTAGG алтернатива в Oracle 10g

Опитайте да използвате XMLAGG като това:

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;

Ако имате нужда от конкатенация в определен ред, кажете нарастващ ред на SiteId, след това добавете order by клауза в 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;

РЕДАКТИРАНЕ:

Ако искате да показвате резултат за всички онези хора, които са присвоени на сайт 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Литералът за дата '[гггг-мм-дд]' на Oracle винаги ли използва модела гггг-мм-дд?

  2. Изхвърлете данни от таблица(и) на Oracle към изрази INSERT

  3. Oracle подреждане на резултатите с помощта на смесена колона varchar, но числова клауза where

  4. Прилагане на филтър в Oracle View

  5. Oracle-Преобразуване на SQL в ANSI SQL