PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Équivalent de array_agg de PostgreSQL dans Oracle XE 11.2

Sauf si vous l'utilisez dans une procédure stockée pour enregistrer la sortie sous forme de tableau (ou de collection), une requête avec LISTAGG devrait être suffisant et donne le même résultat.

select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;

Dans Oracle, nous n'avons pas de fonction de conversion simple comme array_agg . Cependant, vous pouvez créer un type de collection défini par l'utilisateur, puis utiliser CAST et COLLECT fonctions pour le convertir en un NESTED TABLE pour obtenir le même résultat souhaité.

Tout d'abord, créez une collection TYPE .

create or replace TYPE categorytype as TABLE OF VARCHAR2(20);

Maintenant, exécuter cette requête équivaut à utiliser string_agg ou LISTAGG , bien que les categories est un tableau ou une collection , plutôt qu'une chaîne.

select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;

| ID | CATEGORIES |
|----|------------|
|  1 |  Cat1,Cat2 |
|  2 |  Cat3,Cat4 |

DÉMO