Heim >Datenbank >MySQL-Tutorial >Wie kann ich in Oracle SQL mehrere Zeilen effizient zu einer einzigen Zeile verketten?

Wie kann ich in Oracle SQL mehrere Zeilen effizient zu einer einzigen Zeile verketten?

Susan Sarandon
Susan SarandonOriginal
2025-01-05 13:32:401007Durchsuche

How Can I Efficiently Concatenate Multiple Rows into a Single Row in Oracle SQL?

Datenmanipulation in Oracle: Mehrere Zeilen zu einer verketten

In Oracle ist die effiziente Verkettung mehrerer Zeilen zu einer einzigen Zeile oft ein gewünschter Vorgang. Diese Frage befasst sich mit einem bestimmten Szenario, in dem eine Tabelle Daten im folgenden Format enthält:

question_id element_id
1 7
1 8
2 9
3 10
3 11
3 12

Das Ziel besteht darin, diese Daten in das folgende gewünschte Ergebnis umzuwandeln:

question_id element_id
1 7,8
2 9
3 10,11,12

Zu erreichen Um diese Aufgabe effektiv zu bewältigen, ohne auf gespeicherte Prozeduren zurückzugreifen, führte Oracle 11gR2 die LISTAGG-Klausel ein. Mit dieser bemerkenswerten Klausel können solche Verkettungsoperationen direkt in einer einzigen SQL-Anweisung ausgeführt werden.

So implementieren Sie sie in Ihrer Oracle-Abfrage:

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
FROM YOUR_TABLE
GROUP BY question_id;

Die LISTAGG-Klausel hat die folgende Form :

LISTAGG(expression, delimiter) WITHIN GROUP (ORDER BY expression)

In diesem Fall geben wir die Spalte „element_id“ als Ausdruck und „“, als Trennzeichen zum Trennen an verkettete Werte. Die WITHIN GROUP-Klausel stellt sicher, dass die Verkettung innerhalb jeder Gruppe durchgeführt wird, die durch die Spalte „question_id“ definiert ist.

Es ist zu beachten, dass die resultierende verkettete Zeichenfolge die maximale Längenbeschränkung für einen VARCHAR2-Datentyp überschreiten kann ( 4000 Zeichen). Um dieses potenzielle Problem zu beheben, hat Oracle 12cR2 die Option ON OVERFLOW TRUNCATE/ERROR eingeführt. Durch die Einbindung dieser Option können Sie angeben, ob die Zeichenfolge abgeschnitten oder ein Fehler ausgegeben werden soll, wenn die Längenbeschränkung überschritten wird.

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

Stellungnahme:
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