Oracle LISTAGG: Strings mit eindeutigen Werten generieren
Oracles Funktion LISTAGG
ist für die Verkettung von Spaltenwerten in einer einzigen Zeichenfolge von unschätzbarem Wert. Um jedoch nur eindeutige Werte innerhalb der aggregierten Zeichenfolge zu erhalten, ist ein spezifischer Ansatz erforderlich. Dieser Leitfaden demonstriert effiziente Methoden und vermeidet die Notwendigkeit benutzerdefinierter Funktionen oder gespeicherter Prozeduren.
Oracle 19c und höher: DISTINCT direkt nutzen
Für Oracle 19c und nachfolgende Versionen kann das Schlüsselwort DISTINCT
nahtlos in die Funktion LISTAGG
selbst integriert werden:
<code class="language-sql">SELECT LISTAGG(DISTINCT the_column, ',') WITHIN GROUP (ORDER BY the_column) FROM the_table;</code>
Oracle 18c und früher: Verwenden einer Unterabfrage
In älteren Oracle-Versionen (18c und früher) ist eine Unterabfrage erforderlich, um vor der Aggregation nach eindeutigen Werten zu filtern:
<code class="language-sql">SELECT LISTAGG(the_column, ',') WITHIN GROUP (ORDER BY the_column) FROM ( SELECT DISTINCT the_column FROM the_table ) t;</code>
Einbinden mehrerer Spalten
Die folgende Abfrage erweitert die Funktionalität um mehrere Spalten und demonstriert so eine robuste Methode für komplexere Szenarien:
<code class="language-sql">SELECT DISTINCT col1, listagg(col2, ',') OVER (PARTITION BY col1 ORDER BY col2) AS col2_list FROM table_name WHERE RN = 1 GROUP BY col1 ORDER BY col1;</code>
Zusammenfassend lässt sich sagen, dass Sie mithilfe des Schlüsselworts DISTINCT
(19c und höher) oder einer Unterabfrage (18c und niedriger) effektiv LISTAGG
-Ergebnisse generieren können, die nur eindeutige Werte enthalten. Diese Techniken bieten Flexibilität über verschiedene Oracle-Versionen hinweg und erleichtern bei Bedarf die Einbindung mehrerer Spalten.
Das obige ist der detaillierte Inhalt vonWie kann ich eindeutige Werte sicherstellen, wenn ich die LISTAGG-Funktion von Oracle verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!