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.