Heim >Datenbank >MySQL-Tutorial >Wie verkette ich mehrere Zeilen in einer einzigen Zeichenfolge in SQL?

Wie verkette ich mehrere Zeilen in einer einzigen Zeichenfolge in SQL?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-01 12:19:10332Durchsuche

How to Concatenate Multiple Rows into a Single String in SQL?

Verketten von Werten basierend auf der ID

Bei der Datenmanipulation ist es oft notwendig, Daten aus mehreren Zeilen in einer einzigen Zeichenfolge zu kombinieren. Dies kann durch Verkettung erreicht werden, bei der eine Zeichenfolge aus kleineren Fragmenten zusammengesetzt wird.

Problemstellung:

Sie haben eine Tabelle namens „Ergebnisse“ mit zwei Spalten: „ Response_ID“ und „Label“. Jede „Response_ID“ entspricht mehreren „Label“-Werten. Ihr Ziel ist es, eine neue Tabelle mit einer Zeile pro „Response_ID“ und allen „Label“-Werten zu generieren, die in einer einzigen Zeichenfolge verkettet und durch Kommas getrennt sind.

Lösung:

Um Werte basierend auf „Response_ID“ zu verketten, können Sie das folgende SQL verwenden Abfrage:

select T1.Response_ID,
       stuff((select ','+T2.Label
              from Results as T2
              where T1.Response_ID = T2.Response_ID
              for xml path(''), type).value('.', 'varchar(max)'), 1, 1, '') as Label
from Results as T1
group by T1.Response_ID

Erläuterung:

  • T1.Response_ID: Die Spalte „Response_ID“ aus der Originaltabelle.
  • Stuff(): Diese Funktion verkettet Zeichenfolgen. Es werden die folgenden Argumente benötigt:

    • Die resultierende Zeichenfolge, die verkettet werden soll (in Klammern).
    • Die Startposition in der resultierenden Zeichenfolge, an der die Verkettung beginnen soll (in diesem Fall 1).
    • Die Länge des Teilstrings, der vom Anfang des resultierenden Strings entfernt werden soll (in diesem Fall 1).
    • Der zu seinde String verkettet.
  • XML-Pfad: Diese Unterabfrage generiert ein XML-Fragment für den Verkettungsprozess. Jeder „Label“-Wert wird in ein durch Kommas getrenntes XML-Element eingeschlossen.
  • value(): Diese Funktion extrahiert die verkettete Zeichenfolge aus dem XML-Fragment.

Beispiel:

Bedenken Sie Folgendes Tabelle:

Response_ID Label
12147 It was not clear
12458 Did not Understand
12458 Was not resolved
12458 Did not communicate
12586 Spoke too fast
12587 Too slow

Die obige Abfrage würde die folgende Ausgabe erzeugen:

Response_ID Label
12147 It was not clear
12458 Did not Understand,Was not resolved,Did not communicate
12586 Spoke too fast
12587 Too slow

Hinweis: Die Reihenfolge der verketteten Zeichenfolgen ist möglicherweise nicht immer vorhersehbar. Zur genauen Steuerung der Reihenfolge können Sie in der Unterabfrage eine „ORDER BY“-Anweisung verwenden.

Das obige ist der detaillierte Inhalt vonWie verkette ich mehrere Zeilen in einer einzigen Zeichenfolge in SQL?. 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