Heim >Datenbank >MySQL-Tutorial >Wie verkettet man gruppierte Werte in SQL Server mithilfe einer benutzerdefinierten Aggregatfunktion?
SQL Server-String-Aggregation mit benutzerdefinierten Aggregatfunktionen
Müssen Zeichenfolgen innerhalb von Gruppen in SQL Server verkettet werden, ähnlich wie bei MySQL GROUP_CONCAT
? SQL Server 2005 und spätere Versionen verfügen nicht über ein integriertes Äquivalent und erfordern eine erweiterte Lösung. Eine benutzerdefinierte Aggregatfunktion (UDAF) bietet einen effektiven Ansatz.
Betrachten Sie diese Beispieldaten:
Id | Value |
---|---|
1 | 'A' |
1 | 'B' |
2 | 'C' |
Das Ziel besteht darin, diese Ausgabe zu erreichen:
Id | Value |
---|---|
1 | 'AB' |
2 | 'C' |
Erstellen des UDAF
Der folgende Code definiert ein UDAF mit dem Namen AggregateConcat
, um die Zeichenfolgenverkettung innerhalb jeder Gruppe durchzuführen:
<code class="language-sql">CREATE FUNCTION AggregateConcat (@id INT, @value VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS BEGIN DECLARE @result VARCHAR(MAX) = ''; SELECT @result = @result + Value FROM TABLE_NAME WHERE Id = @id; RETURN @result; END;</code>
Verwendung des UDAF
Diese Funktion kann in einer SELECT
-Anweisung wie jede andere Aggregatfunktion verwendet werden:
<code class="language-sql">SELECT Id, dbo.AggregateConcat(Id, Value) AS ConcatenatedValue FROM TABLE_NAME GROUP BY Id;</code>
Diese Abfrage gruppiert die Daten nach Id
und wendet die Funktion AggregateConcat
an, um die Spalte Value
für jede Gruppe zu verketten und so das gewünschte Ergebnis zu erzielen. Denken Sie daran, TABLE_NAME
durch Ihren tatsächlichen Tabellennamen zu ersetzen. Diese vereinfachte Version vermeidet den weniger effizienten Cursor-basierten Ansatz. Erwägen Sie für sehr große Datensätze alternative, leistungsfähigere Methoden wie die Verwendung von STRING_AGG
(verfügbar in SQL Server 2017 und höher).
Das obige ist der detaillierte Inhalt vonWie verkettet man gruppierte Werte in SQL Server mithilfe einer benutzerdefinierten Aggregatfunktion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!