Om du inte använder den i en lagrad procedur för att spara utdata som en array (eller samling), en fråga med LISTAGG
bör vara tillräcklig och ger samma utdata.
select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;
I Oracle har vi inte en enkel konverteringsfunktion som array_agg
. Du kan dock skapa en användardefinierad samlingstyp och sedan använda CAST
och COLLECT
funktioner för att konvertera den till en NESTED TABLE
för att få samma önskade utdata.
Skapa först en samling TYPE
.
create or replace TYPE categorytype as TABLE OF VARCHAR2(20);
Nu, att köra den här frågan motsvarar att använda string_agg
eller LISTAGG
, även om categories
är en array eller samling , snarare än en sträng.
select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;
| ID | CATEGORIES |
|----|------------|
| 1 | Cat1,Cat2 |
| 2 | Cat3,Cat4 |