Heim >Datenbank >MySQL-Tutorial >Wie verkettet man gruppierte Werte in SQL Server mithilfe einer benutzerdefinierten Aggregatfunktion?

Wie verkettet man gruppierte Werte in SQL Server mithilfe einer benutzerdefinierten Aggregatfunktion?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-09 12:37:55534Durchsuche

How to Concatenate Grouped Values in SQL Server Using a User-Defined Aggregate Function?

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!

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