Heim >Datenbank >MySQL-Tutorial >Wie kann ich Zeilen aus einer Unterabfrage in SQL Server effizient verketten?
SQL Server-Zeilenverkettung: Eine benutzerdefinierte Funktion und ein moderner Ansatz
Dieser Artikel demonstriert zwei Methoden zum effizienten Verketten von Zeilen aus einer Unterabfrage in SQL Server, was zu einer einzigen durch Trennzeichen getrennten Zeichenfolge führt. Die erste verwendet eine benutzerdefinierte Funktion und bietet Kompatibilität zwischen verschiedenen SQL Server-Versionen. Die zweite nutzt die Funktion STRING_AGG
, die in SQL Server 2017 und höher verfügbar ist und eine verbesserte Leistung bietet.
Methode 1: Die JoinRows
benutzerdefinierte Funktion
Für eine breitere Kompatibilität mit SQL Server-Versionen bietet eine benutzerdefinierte Funktion eine saubere Lösung. Die folgende JoinRows
-Funktion verwendet ein Trennzeichen und eine Tabelle als Eingabe und gibt eine verkettete Zeichenfolge zurück:
<code class="language-sql">CREATE FUNCTION JoinRows ( @Separator CHAR(1), @InputTable TABLE (ID INT, Value VARCHAR(MAX)) ) RETURNS VARCHAR(MAX) BEGIN RETURN ( SELECT COALESCE(@Separator + I.Value, I.Value) FROM @InputTable AS I FOR XML PATH('') ); END;</code>
Diese Funktion kann wie folgt in Ihre Abfrage integriert werden:
<code class="language-sql">SELECT VehicleID, Name, JoinRows(', ', (SELECT City FROM Location WHERE VehicleID = Vehicles.VehicleID)) AS Locations FROM Vehicles;</code>
Methode 2: STRING_AGG
(SQL Server 2017 und höher)
Für SQL Server 2017 und nachfolgende Versionen bietet die integrierte STRING_AGG
-Funktion einen schlankeren und oft schnelleren Ansatz:
<code class="language-sql">SELECT VehicleID, Name, STRING_AGG(City, ', ') WITHIN GROUP (ORDER BY City) AS Locations FROM Vehicles INNER JOIN Location ON Vehicles.VehicleID = Location.VehicleID GROUP BY VehicleID, Name;</code>
Diese Methode verbindet die Tabellen Vehicles
und Location
direkt und verwendet STRING_AGG
, um die City
-Werte zu aggregieren, partitioniert durch VehicleID
, was eine effizientere Lösung für neuere SQL Server-Instanzen bietet. Beachten Sie den Zusatz WITHIN GROUP (ORDER BY City)
für eine vorhersehbare Reihenfolge verketteter Städte. Dies ist optional, wird aber für konsistente Ergebnisse empfohlen. Die GROUP BY
-Klausel ist auch notwendig, um eine korrekte Aggregation sicherzustellen.
Wählen Sie die Methode, die am besten zu Ihrer SQL Server-Version und Ihren Leistungsanforderungen passt. Für ältere Versionen ist die benutzerdefinierte Funktion erforderlich; für neuere Versionen bietet STRING_AGG
einen erheblichen Leistungsvorteil.
Das obige ist der detaillierte Inhalt vonWie kann ich Zeilen aus einer Unterabfrage in SQL Server effizient verketten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!