Heim >Datenbank >MySQL-Tutorial >Gibt es in älteren Oracle-Versionen ein LISTAGG-Äquivalent zu MySQLs GROUP_CONCAT?
Frage:
Wie verkette ich mehrere Werte in einer bestimmten Spalte in einer einzigen durch Kommas getrennten Zeichenfolge in Oracle? Die Eingabedaten folgen einem bestimmten Format und die gewünschte Ausgabe sollte Werte für jeden eindeutigen Schlüssel gruppieren und verketten.
Antwort:
Für Oracle 11g und höher:
Verwenden Sie die LISTAGG-Funktion:
<code class="language-sql">SELECT col1, LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) "names" FROM table_x GROUP BY col1</code>
Für Oracle 10g und niedriger:
Eine Möglichkeit besteht darin, eine benutzerdefinierte Funktion zu erstellen:
<code class="language-sql">CREATE OR REPLACE FUNCTION get_comma_separated_value (input_val IN NUMBER) RETURN VARCHAR2 IS return_text VARCHAR2(10000) := NULL; BEGIN FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP return_text := return_text || ',' || x.col2 ; END LOOP; RETURN LTRIM(return_text, ','); END; /</code>
Anwendung:
<code class="language-sql">SELECT col1, get_comma_separated_value(col1) FROM table_name</code>
Hinweis: Oracle-Versionen vor 11g bieten eingeschränkte Unterstützung für die WM_CONCAT-Funktion, ihre Verwendung ist jedoch aufgrund möglicher Probleme veraltet (Einzelheiten finden Sie in der Oracle-Dokumentation).
In MySQL (nur als Referenz):
GROUP_CONCAT-Funktion verfügbar:
<code class="language-sql">SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1</code>
Das obige ist der detaillierte Inhalt vonGibt es in älteren Oracle-Versionen ein LISTAGG-Äquivalent zu MySQLs GROUP_CONCAT?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!