Преди да се появи SQL Server 2017, не е имало T-SQL еквивалент на MySQL GROUP_CONCAT() функция. Тази функция ви позволява да върнете набор от резултати като списък, разделен със запетая, за разлика от изброяването на всеки ред като отделен ред (както при нормален набор от резултати).
Преди SQL Server 2017, ако искате да поставите резултата си в списък, разделен със запетая, ще трябва да намерите заобиколно решение, може би като използвате комбинация от STUFF() , FOR XML и PATH() .
Въпреки това, T-SQL вече има STRING_AGG() функция, която е налична от SQL Server 2017. Тази функция прави почти същото нещо като GROUP_CONCAT() на MySQL функция (с някои малки разлики).
Синтаксис
Синтаксисът на STRING_AGG() функцията е така:
STRING_AGG ( expression, separator ) [ <order_clause> ]
<order_clause> ::=
WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
Където expression е израз от всякакъв тип. Изразите се преобразуват в NVARCHAR или VARCHAR типове по време на конкатенация. Типовете, които не са низови, се преобразуват в NVARCHAR тип.
Където разделител е израз на NVARCHAR или VARCHAR тип, който се използва като разделител за конкатенирани низове. Може да бъде буквално или променливо.
Клаузата за поръчка (по избор) се състои от WITHIN GROUP последвано от ORDER BY ASC или ORDER BY DESC в скоби. ASC подрежда резултата във възходящ ред. Това е стойността по подразбиране. DESC подрежда резултата в низходящ ред.
Пример
Ето един бърз пример за STRING_AGG() функция:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres;
Резултат:
Result -------------------------------------------- Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Както можете да видите, наборът от резултати е посочен като списък, разделен със запетая. Това е така, защото вторият ни аргумент е запетая, която указва, че като разделител трябва да се използва запетая.
Ето същия набор от резултати, но без STRING_AGG() функция:
SELECT Genre AS Result FROM Genres;
Резултат:
Result ------- Rock Jazz Country Pop Blues Hip Hop Rap Punk
Така че просто нормален набор от резултати.
За повече примери, като групиране, обработка на нулеви стойности и подреждане на резултатите, вижте Как да върнете резултатите от заявката като списък, разделен със запетая в SQL Server.