Te damos la bienvenida a nuestro sitio, en este sitio vas a encontrar la respuesta que estás buscando.
Solución:
Usar FOR XML PATH('')
– que está convirtiendo las entradas a una coma separada string y STUFF() -que es recortar la primera coma- de la siguiente manera Lo que le da el mismo resultado separado por comas
SELECT STUFF((SELECT ',' + INSTITUTIONNAME
FROM EDUCATION EE
WHERE EE.STUDENTNUMBER=E.STUDENTNUMBER
ORDER BY sortOrder
FOR XML PATH('')), 1, 1, '') AS listStr
FROM EDUCATION E
GROUP BY E.STUDENTNUMBER
Aquí está el VIOLÍN
Para Sql Server 2017 y versiones posteriores, puede usar el nuevo STRING_AGG
función
https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql
El siguiente ejemplo reemplaza null valores con ‘N/A’ y devuelve los nombres separados por comas en una sola celda de resultado.
SELECT STRING_AGG ( ISNULL(FirstName,'N/A'), ',') AS csv FROM Person.Person;
Aquí está el conjunto de resultados.
John,N/A,Mike,Peter,N/A,N/A,Alice,Bob
Quizás un caso de uso más común es agrupar y luego agregar, tal como lo haría con SUM
, COUNT
o AVG
.
SELECT a.articleId, title, STRING_AGG (tag, ',') AS tags
FROM dbo.Article AS a
LEFT JOIN dbo.ArticleTag AS t
ON a.ArticleId = t.ArticleId
GROUP BY a.articleId, title;
esto funciona en el servidor sql 2016
USE AdventureWorks
GO
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' ,'') + Name
FROM Production.Product
SELECT @listStr
GO
Te invitamos a patrocinar nuestra labor poniendo un comentario o dejando una puntuación te lo agradecemos.