Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Alternatywa LITAGG w Oracle 10g

Spróbuj użyć XMLAGG tak:

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;

Jeśli potrzebujesz konkatenacji w określonej kolejności, powiedzmy rosnąca kolejność SiteId, a następnie dodaj order by klauzula w 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;

EDYTUJ:

Jeśli chcesz wyświetlić wyniki dla wszystkich osób przypisanych do witryny 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. Pełna replikacja bazy danych MySQL? Pomysły? Co robią ludzie?

  2. Jak utworzyć wyzwalacz wiersza PL/SQL, który sprawdza poprawność kolumny z innej tabeli?

  3. Pierwsze kroki z Oracle LiveSQL

  4. ORA-28001:hasło wygasło, nie można naprawić

  5. Dodawanie typów plików, które mają być rozpoznawane przez Files.probeContentType(new File(.ttf).toPath());