Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

L'équivalent SQL Server de GROUP_CONCAT()

Avant l'arrivée de SQL Server 2017, il n'y avait pas d'équivalent T-SQL du MySQL GROUP_CONCAT() une fonction. Cette fonction vous permet de renvoyer un ensemble de résultats sous la forme d'une liste séparée par des virgules, au lieu de répertorier chaque ligne sur une ligne distincte (comme avec un ensemble de résultats normal).

Avant SQL Server 2017, si vous vouliez placer votre résultat dans une liste séparée par des virgules, vous deviez trouver une solution de contournement, peut-être en utilisant une combinaison de STUFF() , FOR XML , et PATH() .

Cependant, T-SQL a maintenant le STRING_AGG() qui est disponible à partir de SQL Server 2017. Cette fonction fait à peu près la même chose que GROUP_CONCAT() de MySQL fonction (avec quelques différences mineures).

Syntaxe

La syntaxe de STRING_AGG() la fonction se présente comme suit :

STRING_AGG ( expression, separator ) [ <order_clause> ]

<order_clause> ::=   
    WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )

expression est une expression de n'importe quel type. Les expressions sont converties en NVARCHAR ou VARCHAR types lors de la concaténation. Les types autres que des chaînes sont convertis en NVARCHAR saisir.

Où le séparateur est une expression de NVARCHAR ou VARCHAR type utilisé comme séparateur pour les chaînes concaténées. Il peut être littéral ou variable.

La clause de commande (facultative) consiste en WITHIN GROUP suivi de ORDER BY ASC ou ORDER BY DESC entre parenthèses. ASC ordonne le résultat par ordre croissant. Ceci est la valeur par défault. DESC ordonne le résultat par ordre décroissant.

Exemple

Voici un exemple rapide du STRING_AGG() fonction :

SELECT STRING_AGG(Genre, ',') AS Result
FROM Genres;

Résultat :

Result                                      
--------------------------------------------
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk

Comme vous pouvez le voir, le jeu de résultats est répertorié sous la forme d'une liste séparée par des virgules. C'est parce que notre deuxième argument est une virgule, qui spécifie qu'une virgule doit être utilisée comme séparateur.

Voici le même jeu de résultats mais sans le STRING_AGG() fonction :

SELECT Genre AS Result 
FROM Genres;

Résultat :

Result 
-------
Rock   
Jazz   
Country
Pop    
Blues  
Hip Hop
Rap    
Punk   

Donc juste un jeu de résultats normal.

Pour plus d'exemples, tels que le regroupement, la gestion des valeurs nulles et le classement des résultats, consultez Comment renvoyer les résultats d'une requête sous forme de liste séparée par des virgules dans SQL Server.