Освен ако не го използвате в съхранена процедура, за да запазите изхода като масив (или колекция), заявка с LISTAGG трябва да е достатъчно и да дава същия резултат.
select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;
В Oracle нямаме проста функция за преобразуване като array_agg . Можете обаче да създадете дефиниран от потребителя тип колекция, след което да използвате CAST и COLLECT функции, за да го преобразувате в NESTED TABLE за да получите същия желан резултат.
Първо създайте колекция TYPE .
create or replace TYPE categorytype as TABLE OF VARCHAR2(20);
Сега изпълнението на тази заявка е еквивалентно на използването на string_agg или LISTAGG , въпреки че categories е масив или колекция , а не низ.
select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;
| ID | CATEGORIES |
|----|------------|
| 1 | Cat1,Cat2 |
| 2 | Cat3,Cat4 |