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
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
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;
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;
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!