A menos que lo esté utilizando en un procedimiento almacenado para guardar la salida como una matriz (o colección), una consulta con LISTAGG
debería ser suficiente y da el mismo resultado.
select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;
En Oracle, no tenemos una función de conversión directa como array_agg
. Sin embargo, puede crear un tipo de colección definido por el usuario y luego usar CAST
y COLLECT
funciones para convertirlo en una NESTED TABLE
para obtener el mismo resultado deseado.
En primer lugar, crea una colección TYPE
.
create or replace TYPE categorytype as TABLE OF VARCHAR2(20);
Ahora, ejecutar esta consulta es equivalente a usar string_agg
o LISTAGG
, aunque categories
es una matriz o colección , en lugar de una cadena.
select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;
| ID | CATEGORIES |
|----|------------|
| 1 | Cat1,Cat2 |
| 2 | Cat3,Cat4 |