Antes do surgimento do SQL Server 2017, não havia um equivalente T-SQL do MySQL
GROUP_CONCAT()
função. Essa função permite que você retorne um conjunto de resultados como uma lista separada por vírgulas, em vez de listar cada linha como uma linha separada (como em um conjunto de resultados normal). Antes do SQL Server 2017, se você quisesse colocar seu resultado em uma lista separada por vírgulas, precisaria encontrar uma solução alternativa, talvez usando uma combinação de
STUFF()
, FOR XML
e PATH()
. No entanto, o T-SQL agora tem o
STRING_AGG()
que está disponível no SQL Server 2017. Essa função faz praticamente a mesma coisa que o GROUP_CONCAT()
do MySQL função (com algumas pequenas diferenças). Sintaxe
A sintaxe do
STRING_AGG()
função fica assim:STRING_AGG ( expression, separator ) [ <order_clause> ] <order_clause> ::= WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
Onde
expression
é uma expressão de qualquer tipo. As expressões são convertidas em NVARCHAR
ou VARCHAR
tipos durante a concatenação. Os tipos sem string são convertidos em NVARCHAR
tipo. Em que separador é uma expressão de
NVARCHAR
ou VARCHAR
tipo que é usado como separador para strings concatenadas. Pode ser literal ou variável. A cláusula de pedido (opcional) consiste em
WITHIN GROUP
seguido por ORDER BY ASC
ou ORDER BY DESC
em parênteses. ASC
ordena o resultado em ordem crescente. Este é o valor padrão. DESC
ordena o resultado em ordem decrescente. Exemplo
Aqui está um exemplo rápido do
STRING_AGG()
função:SELECT STRING_AGG(Genre, ',') AS Result FROM Genres;
Resultado:
Result -------------------------------------------- Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Como você pode ver, o conjunto de resultados é listado como uma lista separada por vírgulas. Isso ocorre porque nosso segundo argumento é uma vírgula, que especifica que uma vírgula deve ser usada como separador.
Aqui está o mesmo conjunto de resultados, mas sem o
STRING_AGG()
função:SELECT Genre AS Result FROM Genres;
Resultado:
Result ------- Rock Jazz Country Pop Blues Hip Hop Rap Punk
Portanto, apenas um conjunto de resultados normal.
Para obter mais exemplos, como agrupar, manipular valores nulos e ordenar os resultados, consulte Como retornar resultados de consulta como uma lista separada por vírgulas no SQL Server.