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

Svarende til PostgreSQL's array_agg i Oracle XE 11.2

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 |

DEMO



  1. MySQL ANTAL af flere venstre joinforbindelser - optimering

  2. syntaksfejl fra CREATE USER med variabler, der giver brugernavn og adgangskode

  3. Foretag flere input i mysql-tabellen på én gang med én indsend-knap

  4. Kan ColumnStore hjælpe med sideinddelingsarbejdsbelastninger?