Tenzij u het in een opgeslagen procedure gebruikt om de uitvoer op te slaan als een array (of verzameling), een query met LISTAGG zou voldoende moeten zijn en geeft dezelfde output.
select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;
In Oracle hebben we geen eenvoudige conversiefunctie zoals array_agg . U kunt echter een door de gebruiker gedefinieerd verzamelingstype maken en vervolgens CAST . gebruiken en COLLECT functies om het te converteren naar een NESTED TABLE om dezelfde gewenste output te krijgen.
Maak eerst een verzameling TYPE .
create or replace TYPE categorytype as TABLE OF VARCHAR2(20);
Het uitvoeren van deze query is gelijk aan het gebruik van string_agg of LISTAGG , hoewel categories is een array of verzameling , in plaats van een tekenreeks.
select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;
| ID | CATEGORIES |
|----|------------|
| 1 | Cat1,Cat2 |
| 2 | Cat3,Cat4 |