Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Das SQL Server-Äquivalent zu GROUP_CONCAT()

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.