Heim > Datenbank > MySQL-Tutorial > Wie verkette ich mehrere Zeilen in Oracle mithilfe von LISTAGG zu einer einzigen Zeile?

Wie verkette ich mehrere Zeilen in Oracle mithilfe von LISTAGG zu einer einzigen Zeile?

Barbara Streisand
Freigeben: 2025-01-06 03:11:38
Original
628 Leute haben es durchsucht

How to Concatenate Multiple Rows into a Single Row in Oracle Using LISTAGG?

Verketten mehrerer Zeilen zu einer einzigen in Oracle

So verketten Sie mehrere Zeilen zu einer einzigen Zeile in Oracle, ohne eine gespeicherte Prozedur zu verwenden, Oracle Benutzer können die LISTAGG-Klausel verwenden. Diese Klausel ermöglicht eine effiziente Zeilenkonsolidierung basierend auf einem angegebenen Trennzeichen.

Datenszenario:

Berücksichtigen Sie die folgenden Daten:

question_id    element_id
1              7
1              8
2              9
3              10
3              11
3              12
Nach dem Login kopieren

Gewünschte Ausgabe:

Das gewünschte Ergebnis besteht darin, die element_id-Werte für jeden zu verketten Frage_ID, was zu Folgendem führt:

question_id    element_id
1              7,8
2              9
3              10,11,12
Nach dem Login kopieren

Lösung mit LISTAGG:

Ab Oracle 11gR2 kann die LISTAGG-Klausel verwendet werden, um diese Verkettung zu erreichen:

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
FROM YOUR_TABLE
GROUP BY question_id;
Nach dem Login kopieren

Diese Abfrage verwendet die LISTAGG-Funktion, um die element_id-Werte innerhalb jeder durch definierten Gruppe zu verketten Frage_ID. Die ORDER BY-Klausel stellt sicher, dass die Werte innerhalb jeder Gruppe vor der Verkettung geordnet werden.

Überlaufbehandlung:

Beachten Sie, dass die resultierende verkettete Zeichenfolge die maximal zulässige Länge überschreitet Für den Datentyp (z. B. 4000 Zeichen für VARCHAR2) bieten Oracle-Versionen 12cR2 und höher Optionen zur Handhabung Überlauf.

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) OVERFLOW TRUNCATE/ERROR
FROM YOUR_TABLE
GROUP BY question_id;
Nach dem Login kopieren

Diese Abfrage gibt die ON OVERFLOW TRUNCATE/ERROR-Klausel an, um entweder abzuschneiden oder einen Fehler auszulösen, wenn das Ergebnis die maximale Länge überschreitet.

Das obige ist der detaillierte Inhalt vonWie verkette ich mehrere Zeilen in Oracle mithilfe von LISTAGG zu einer einzigen Zeile?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage