PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Equivalente ao array_agg do PostgreSQL no Oracle XE 11.2


A menos que você esteja usando em um procedimento armazenado para salvar a saída como uma matriz (ou coleção), uma consulta com LISTAGG deve ser suficiente e dá a mesma saída.
select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;

No oracle, não temos uma função de conversão direta como array_agg . No entanto, você pode criar um tipo de coleção definido pelo usuário e usar CAST e COLLECT funções para convertê-lo em uma NESTED TABLE para obter a mesma saída desejada.

Em primeiro lugar, crie uma coleção TYPE .
create or replace TYPE categorytype as TABLE OF VARCHAR2(20);

Agora, executar esta consulta é equivalente a usar string_agg ou LISTAGG , embora categories é uma matriz ou coleção , em vez de uma string.
select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;

| ID | CATEGORIES |
|----|------------|
|  1 |  Cat1,Cat2 |
|  2 |  Cat3,Cat4 |

DEMO