sql >> Base de Datos >  >> RDS >> PostgreSQL

Equivalente de array_agg de PostgreSQL en Oracle XE 11.2

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 |

DEMO