PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Entspricht dem array_agg von PostgreSQL in Oracle XE 11.2

Es sei denn, Sie verwenden es in einer gespeicherten Prozedur, um die Ausgabe als Array (oder Sammlung) zu speichern, eine Abfrage mit LISTAGG sollte ausreichen und liefert die gleiche Ausgabe.

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

In Oracle haben wir keine einfache Konvertierungsfunktion wie array_agg . Sie können jedoch einen benutzerdefinierten Sammlungstyp erstellen und dann CAST verwenden und COLLECT Funktionen, um es in eine NESTED TABLE umzuwandeln um die gleiche gewünschte Ausgabe zu erhalten.

Erstellen Sie zunächst eine Sammlung TYPE .

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

Nun entspricht die Ausführung dieser Abfrage der Verwendung von string_agg oder LISTAGG , obwohl categories ist ein Array oder eine Sammlung , statt einer Zeichenfolge.

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

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

DEMO