In Oracle die LISTAGG()
Funktion ermöglicht es uns, Daten aus mehreren Zeilen in einer einzigen Zeile zu kombinieren.
Wir haben die Möglichkeit, ein Trennzeichen (z. B. ein Komma) anzugeben. Wir können auch die von LISTAGG()
erzeugten Ergebnisse bestellen Funktion und mehr.
Syntax
Die Syntax sieht so aus:
LISTAGG( [ ALL | DISTINCT ] measure_expr [, 'delimiter'] [listagg_overflow_clause] )
[ WITHIN GROUP order_by_clause ] [OVER query_partition_clause]
Wobei listagg_overflow_clause
ist:
{ ON OVERFLOW ERROR }
|
{ ON OVERFLOW TRUNCATE [ 'truncation-indicator' ] [ { WITH | WITHOUT } COUNT ] }
Beispiel
Angenommen, wir führen die folgende Abfrage aus:
SELECT region_name
FROM regions;
Ergebnis:
REGION_NAME _________________________ Europe Americas Asia Middle East and Africa
Wir können LISTAGG()
verwenden um diese Ergebnisse in eine kommagetrennte Liste umzuwandeln:
SELECT LISTAGG(region_name, ', ')
FROM regions;
Ergebnis:
LISTAGG(REGION_NAME,',') _________________________________________________ Europe, Americas, Asia, Middle East and Africa
Trennzeichen ändern
Wir können das zweite Argument in ein anderes Trennzeichen ändern:
SELECT LISTAGG(region_name, '; ')
FROM regions;
Ergebnis:
Europe; Americas; Asia; Middle East and Africa
Lassen Sie das Trennzeichen weg
Wir können das zweite Argument weglassen, damit jeder Wert ohne Trennzeichen verkettet wird:
SELECT LISTAGG(region_name)
FROM regions;
Ergebnis:
EuropeAmericasAsiaMiddle East and Africa
Ergebnisse anordnen
Wir können den WITHIN GROUP (ORDER BY...)
verwenden -Klausel, um die Ausgabe von LISTAGG()
zu ordnen Funktion:
SELECT LISTAGG(region_name, ',') WITHIN GROUP (ORDER BY region_name ASC)
FROM regions;
Ergebnis:
Americas,Asia,Europe,Middle East and Africa
Verwendung in gruppierten Abfragen
Wir können die LISTAGG()
verwenden Funktion innerhalb einer gruppierten Abfrage, um Ergebnisse wie diese bereitzustellen:
SELECT
region_id,
LISTAGG(country_id, ', ') WITHIN GROUP (ORDER BY country_id ASC) AS "Countries"
FROM countries
GROUP BY region_id
ORDER BY region_id;
Ergebnis:
REGION_ID Countries ____________ _________________________________ 1 BE, CH, DE, DK, FR, IT, NL, UK 2 AR, BR, CA, MX, US 3 AU, CN, HK, IN, JP, SG 4 EG, IL, KW, NG, ZM, ZW
Nur eindeutige Werte zurückgeben
Wir können den DISTINCT
verwenden -Klausel, um nur eindeutige Werte zurückzugeben:
SELECT LISTAGG(DISTINCT region_id, ', ')
FROM regions;
Ergebnis:
1, 2, 3, 4
Weitere Einzelheiten dazu, was Sie mit dieser Funktion tun können, finden Sie in der Oracle-Dokumentation.