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 |