Optimierung der SQL Server-Datenmanipulation: Kombinieren von Unterabfragezeilen in einem einzigen durch Trennzeichen getrennten Feld
Komplexe Datenmanipulationsaufgaben erfordern oft das Schreiben umständlicher Codes, wie zum Beispiel Cursor-basierte Lösungen. Eine häufige Herausforderung besteht darin, mehrere Unterabfragezeilen in einem einzigen Feld mit einem Trennzeichen zu kombinieren. Dieser Artikel stellt effiziente Alternativen zu langwierigen Cursor-Implementierungen vor.
Betrachten Sie zwei Tabellen, „Fahrzeuge“ und „Standorte“, deren Ziel darin besteht, die mit jedem Fahrzeug verknüpften Städtenamen in einer einzigen Spalte „Standorte“ durch Kommas getrennt zusammenzufassen. Der traditionelle Cursor-Ansatz erfordert umfangreiche Codierung.
SQL Server 2005 und höher:
Eine elegantere Lösung nutzt den Befehl FOR XML PATH
. Dadurch wird XML aus der Tabelle „Standorte“ generiert, Städtenamen werden durch Kommas getrennt, und dann wird das XML mithilfe der Funktion STUFF
:
<code class="language-sql">SELECT [VehicleID], [Name], (STUFF((SELECT ',' + [City] FROM [Location] WHERE (VehicleID = Vehicle.VehicleID) FOR XML PATH('')), 1, 1, '')) AS Locations FROM [Vehicle]</code>
SQL Server 2017 und höher:
Zur Verbesserung der Leistung und Einfachheit bieten SQL Server 2017 und spätere Versionen die Funktion STRING_AGG
. Diese Funktion fasst Werte direkt in einer einzelnen Zeichenfolge zusammen und akzeptiert ein Trennzeichen als zweiten Parameter:
<code class="language-sql">SELECT [VehicleID], [Name], (SELECT STRING_AGG([City], ', ') FROM [Location] WHERE VehicleID = V.VehicleID) AS Locations FROM [Vehicle] V</code>
Beide Methoden kombinieren effektiv mehrere Unterabfragezeilen in einem einzigen getrennten Feld und bieten erhebliche Verbesserungen gegenüber Cursor-basierten Ansätzen, was zu saubererem, effizienterem Code und kürzerer Entwicklungszeit führt. Wählen Sie die für Ihre SQL Server-Version geeignete Methode.
Das obige ist der detaillierte Inhalt vonWie kombiniere ich mehrere Unterabfragezeilen effizient in einem einzigen durch Trennzeichen getrennten Feld in SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!