sql >> Databasteknik >  >> RDS >> PostgreSQL

Motsvarighet till PostgreSQL:s array_agg i Oracle XE 11.2

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 |

DEMO



  1. Komplicerad fotbollsliga Dynamisk beställning i MySQL?

  2. Hur man får värden för varje dag under en månad

  3. Hur gör jag en IF...THEN i en SQL SELECT?

  4. Random() i MySql?