Como posso combinar várias linhas em uma lista delimitada por vírgula no SQL Server 2005?

Agora, eu tenho uma consulta SQL como esta:

SELECT X, Y FROM POINTS 

Ele retorna resultados assim:

 XY ---------- 12 3 15 2 18 12 20 29 

Gostaria de retornar resultados todos em uma linha, como este (adequado para uso em uma tag HTML ):

 XYLIST ---------- 12,3,15,2,18,12,20,29 

Existe uma maneira de fazer isso usando apenas o SQL?

 DECLARE @XYList varchar(MAX) SET @XYList = '' SELECT @XYList = @XYList + CONVERT(varchar, X) + ',' + CONVERT(varchar, Y) + ',' FROM POINTS -- Remove last comma SELECT LEFT(@XYList, LEN(@XYList) - 1) 

Obrigado pelas respostas rápidas e úteis caras!

Acabei de encontrar outro jeito rápido de fazer isso também:

 SELECT STUFF(( SELECT ',' + X + ',' + Y FROM Points FOR XML PATH('') ), 1, 1, '') AS XYList 

O crédito vai para esse cara:

http://geekswithblogs.net/mnf/archive/2007/10/02/t-sql-user-defined-function-to-concatenate-column-to-csv-string.aspx

Usando o truque COALESCE , você não precisa se preocupar com a vírgula final:

 DECLARE @XYList AS varchar(MAX) -- Leave as NULL SELECT @XYList = COALESCE(@XYList + ',', '') + CONVERT(varchar, X) + ',' + CONVERT(varchar, Y) FROM POINTS 
 DECLARE @s VarChar(8000) SET @s = '' SELECT @s = @s + ',' + CAST(X AS VarChar) + ',' + CAST(Y AS VarChar) FROM POINTS SELECT @s 

Apenas se livre da vírgula principal

A partir do SQL 2017, você pode usar o STRING_AGG

 SELECT STRING_AGG (X + ',' + Y, ',') AS XYLIST FROM POINTS 

https://docs.microsoft.com/pt-br/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-2017