Bevor SQL Server 2017 auf den Markt kam, gab es kein T-SQL-Äquivalent zu MySQL GROUP_CONCAT()
Funktion. Mit dieser Funktion können Sie eine Ergebnismenge als durch Kommas getrennte Liste zurückgeben, anstatt jede Zeile als separate Zeile aufzulisten (wie bei einer normalen Ergebnismenge).
Wenn Sie Ihr Ergebnis vor SQL Server 2017 in eine durch Kommas getrennte Liste einfügen wollten, mussten Sie eine Problemumgehung finden, möglicherweise mit einer Kombination aus STUFF()
, FOR XML
, und PATH()
.
Allerdings hat T-SQL jetzt den STRING_AGG()
Funktion, die von SQL Server 2017 verfügbar ist. Diese Funktion macht so ziemlich dasselbe wie MySQLs GROUP_CONCAT()
Funktion (mit einigen geringfügigen Unterschieden).
Syntax
Die Syntax von STRING_AGG()
Funktion geht so:
STRING_AGG ( expression, separator ) [ <order_clause> ] <order_clause> ::= WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
Wobei expression
ist ein Ausdruck jeglicher Art. Ausdrücke werden in NVARCHAR
konvertiert oder VARCHAR
Typen während der Verkettung. Nicht-String-Typen werden in NVARCHAR
konvertiert Typ.
Wobei das Trennzeichen ein Ausdruck von NVARCHAR
ist oder VARCHAR
Typ, der als Trennzeichen für verkettete Zeichenfolgen verwendet wird. Es kann ein Literal oder eine Variable sein.
Die (optionale) Bestellklausel besteht aus WITHIN GROUP
gefolgt von ORDER BY ASC
oder ORDER BY DESC
in Klammern. ASC
ordnet das Ergebnis in aufsteigender Reihenfolge. Dies ist der Standardwert. DESC
ordnet das Ergebnis in absteigender Reihenfolge.
Beispiel
Hier ist ein kurzes Beispiel für STRING_AGG()
Funktion:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres;
Ergebnis:
Result -------------------------------------------- Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Wie Sie sehen können, wird die Ergebnismenge als kommagetrennte Liste aufgeführt. Das liegt daran, dass unser zweites Argument ein Komma ist, was angibt, dass ein Komma als Trennzeichen verwendet werden soll.
Hier ist die gleiche Ergebnismenge, aber ohne STRING_AGG()
Funktion:
SELECT Genre AS Result FROM Genres;
Ergebnis:
Result ------- Rock Jazz Country Pop Blues Hip Hop Rap Punk
Also nur eine normale Ergebnismenge.
Weitere Beispiele wie Gruppieren, Umgang mit Nullwerten und Sortieren der Ergebnisse finden Sie unter So geben Sie Abfrageergebnisse als kommagetrennte Liste in SQL Server zurück.