Než přišel SQL Server 2017, neexistoval ekvivalent T-SQL k MySQL GROUP_CONCAT()
funkce. Tato funkce umožňuje vrátit sadu výsledků jako seznam oddělený čárkami, na rozdíl od výpisu každého řádku jako samostatného řádku (jako u normální sady výsledků).
Pokud jste před SQL Serverem 2017 chtěli vložit výsledek do seznamu odděleného čárkami, museli byste najít řešení, například pomocí kombinace STUFF()
, FOR XML
a PATH()
.
T-SQL však nyní obsahuje STRING_AGG()
funkce, která je dostupná ze serveru SQL Server 2017. Tato funkce dělá v podstatě totéž jako GROUP_CONCAT()
MySQL funkce (s některými menšími rozdíly).
Syntaxe
Syntaxe STRING_AGG()
funkce vypadá takto:
STRING_AGG ( expression, separator ) [ <order_clause> ] <order_clause> ::= WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
Kde expression
je výraz jakéhokoli typu. Výrazy jsou převedeny na NVARCHAR
nebo VARCHAR
typy během zřetězení. Neřetězcové typy se převedou na NVARCHAR
typ.
Kde oddělovač je výraz NVARCHAR
nebo VARCHAR
typ, který se používá jako oddělovač pro zřetězené řetězce. Může být doslovný nebo variabilní.
(volitelná) klauzule objednávky se skládá z WITHIN GROUP
následuje ORDER BY ASC
nebo ORDER BY DESC
v závorce. ASC
seřadí výsledek vzestupně. Toto je výchozí hodnota. DESC
seřadí výsledek v sestupném pořadí.
Příklad
Zde je rychlý příklad STRING_AGG()
funkce:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres;
Výsledek:
Result -------------------------------------------- Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Jak vidíte, sada výsledků je uvedena jako seznam oddělený čárkami. Důvodem je, že naším druhým argumentem je čárka, která určuje, že jako oddělovač by měla být použita čárka.
Zde je stejná sada výsledků, ale bez STRING_AGG()
funkce:
SELECT Genre AS Result FROM Genres;
Výsledek:
Result ------- Rock Jazz Country Pop Blues Hip Hop Rap Punk
Takže jen normální sada výsledků.
Další příklady, jako je seskupování, zpracování hodnot null a řazení výsledků, najdete v tématu Jak vrátit výsledky dotazu jako seznam oddělený čárkami na serveru SQL.