PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Equivalente di array_agg di PostgreSQL in Oracle XE 11.2

A meno che tu non lo stia utilizzando in una procedura memorizzata per salvare l'output come un array (o una raccolta), una query con LISTAGG dovrebbe essere sufficiente e fornisce lo stesso output.

select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;

In Oracle, non abbiamo una semplice funzione di conversione come array_agg . Tuttavia, puoi creare un tipo di raccolta definito dall'utente, quindi utilizzare CAST e COLLECT funzioni per convertirlo in un NESTED TABLE per ottenere lo stesso output desiderato.

Innanzitutto, crea una raccolta TYPE .

create or replace TYPE categorytype as TABLE OF VARCHAR2(20);

Ora, eseguire questa query equivale a usare string_agg o LISTAGG , sebbene categories è un array o una raccolta , anziché una stringa.

select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;

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

DEMO