Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server, еквивалент на GROUP_CONCAT()

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да актуализирате две таблици в един израз в SQL Server 2005?

  2. Как да заявя стойности от xml възли?

  3. Как да активирате всички ограничения за проверка в базата данни на SQL Server - SQL Server / TSQL урок, част 88

  4. SELECT DISTINCT игнорира различни случаи

  5. Защо и кога трябва да използвам SPARSE COLUMN? (SQL SERVER 2008)