Преди да се появи 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.