sql >> Base de Datos >  >> RDS >> Sqlserver

El equivalente de SQL Server a GROUP_CONCAT()

Antes de que apareciera SQL Server 2017, no había un equivalente T-SQL de MySQL GROUP_CONCAT() función. Esta función le permite devolver un conjunto de resultados como una lista separada por comas, en lugar de enumerar cada fila como una fila separada (como con un conjunto de resultados normal).

Antes de SQL Server 2017, si deseaba colocar su resultado en una lista separada por comas, necesitaba encontrar una solución, tal vez usando una combinación de STUFF() , FOR XML y PATH() .

Sin embargo, T-SQL ahora tiene el STRING_AGG() que está disponible en SQL Server 2017. Esta función hace más o menos lo mismo que GROUP_CONCAT() de MySQL función (con algunas diferencias menores).

Sintaxis

La sintaxis del STRING_AGG() la función es así:

STRING_AGG ( expression, separator ) [ <order_clause> ]

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

Donde expression es una expresión de cualquier tipo. Las expresiones se convierten a NVARCHARVARCHAR tipos durante la concatenación. Los tipos que no son cadenas se convierten a NVARCHAR tipo.

Donde el separador es una expresión de NVARCHARVARCHAR type que se usa como separador para cadenas concatenadas. Puede ser literal o variable.

La cláusula de pedido (opcional) consta de WITHIN GROUP seguido de ORDER BY ASC o ORDER BY DESC entre paréntesis. ASC ordena el resultado en orden ascendente. Este es el valor predeterminado. DESC ordena el resultado en orden descendente.

Ejemplo

Aquí hay un ejemplo rápido de STRING_AGG() función:

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

Resultado:

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

Como puede ver, el conjunto de resultados se muestra como una lista separada por comas. Esto se debe a que nuestro segundo argumento es una coma, que especifica que se debe usar una coma como separador.

Aquí está el mismo conjunto de resultados pero sin el STRING_AGG() función:

SELECT Genre AS Result 
FROM Genres;

Resultado:

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

Así que solo un conjunto de resultados normal.

Para obtener más ejemplos, como agrupar, manejar valores nulos y ordenar los resultados, consulte Cómo devolver los resultados de una consulta como una lista separada por comas en SQL Server.