Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server odpowiednik GROUP_CONCAT()

Zanim pojawił się SQL Server 2017, nie było odpowiednika T-SQL dla MySQL GROUP_CONCAT() funkcjonować. Ta funkcja umożliwia zwrócenie zestawu wyników jako listy rozdzielanej przecinkami, w przeciwieństwie do wyświetlania każdego wiersza jako osobnego wiersza (jak w przypadku normalnego zestawu wyników).

Przed wersją SQL Server 2017, jeśli chciałeś umieścić swój wynik na liście oddzielonej przecinkami, musiałeś znaleźć obejście, być może używając kombinacji STUFF() , FOR XML i PATH() .

Jednak T-SQL ma teraz funkcję STRING_AGG() funkcja dostępna w SQL Server 2017. Ta funkcja działa tak samo, jak funkcja GROUP_CONCAT() w MySQL funkcja (z niewielkimi różnicami).

Składnia

Składnia STRING_AGG() funkcja wygląda tak:

STRING_AGG ( expression, separator ) [ <order_clause> ]

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

Gdzie expression to wyrażenie dowolnego typu. Wyrażenia są konwertowane na NVARCHAR lub VARCHAR typy podczas łączenia. Typy niełańcuchowe są konwertowane na NVARCHAR typ.

Gdzie separator jest wyrażeniem NVARCHAR lub VARCHAR typ, który jest używany jako separator dla połączonych ciągów. Może być dosłowny lub zmienny.

Klauzula zamówienia (opcjonalna) składa się z WITHIN GROUP po którym następuje ORDER BY ASC lub ORDER BY DESC w nawiasach. ASC porządkuje wynik w porządku rosnącym. To jest wartość domyślna. DESC porządkuje wynik w kolejności malejącej.

Przykład

Oto krótki przykład STRING_AGG() funkcja:

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

Wynik:

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

Jak widać, zestaw wyników jest wymieniony jako lista oddzielona przecinkami. Dzieje się tak, ponieważ naszym drugim argumentem jest przecinek, który określa, że ​​przecinek powinien być używany jako separator.

Oto ten sam zestaw wyników, ale bez STRING_AGG() funkcja:

SELECT Genre AS Result 
FROM Genres;

Wynik:

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

Czyli zwykły zestaw wyników.

Aby uzyskać więcej przykładów, takich jak grupowanie, obsługa wartości null i porządkowanie wyników, zobacz Jak zwracać wyniki zapytania jako listę rozdzielaną przecinkami w 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. Tymczasowe buforowanie obiektów SQL Server

  2. Automatyzacja przetwarzania modelu tabelarycznego baz danych usług Analysis Services (SSAS) w programie SQL Server

  3. jak zadeklarować zmienną globalną w SQL Server..?

  4. Indeksy oparte na funkcjach w SQL Server

  5. Przekaż zmienną do wyzwalacza