Chyba że używasz go w procedurze składowanej, aby zapisać wynik jako tablicę (lub kolekcję), zapytanie z LISTAGG
powinno wystarczyć i dawać takie same wyniki.
select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;
W Oracle nie mamy prostej funkcji konwersji, takiej jak array_agg
. Możesz jednak utworzyć typ kolekcji zdefiniowany przez użytkownika, a następnie użyć CAST
i COLLECT
funkcje do konwersji do NESTED TABLE
aby uzyskać ten sam pożądany wynik.
Najpierw utwórz kolekcję TYPE
.
create or replace TYPE categorytype as TABLE OF VARCHAR2(20);
Teraz uruchomienie tego zapytania jest równoważne użyciu string_agg
lub LISTAGG
, chociaż categories
to tablica lub kolekcja , a nie ciąg.
select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;
| ID | CATEGORIES |
|----|------------|
| 1 | Cat1,Cat2 |
| 2 | Cat3,Cat4 |