Medmindre du bruger det i en lagret procedure til at gemme output som et array (eller samling), en forespørgsel med LISTAGG
bør være tilstrækkelig og giver samme output.
select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;
I Oracle har vi ikke en ligetil konverteringsfunktion som array_agg
. Du kan dog oprette en brugerdefineret samlingstype og derefter bruge CAST
og COLLECT
funktioner til at konvertere den til en NESTED TABLE
for at få det samme ønskede output.
Først skal du oprette en samling TYPE
.
create or replace TYPE categorytype as TABLE OF VARCHAR2(20);
Nu, at køre denne forespørgsel svarer til at bruge string_agg
eller LISTAGG
, selvom categories
er en matrix eller samling i stedet for en streng.
select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;
| ID | CATEGORIES |
|----|------------|
| 1 | Cat1,Cat2 |
| 2 | Cat3,Cat4 |