Как объединить несколько строк в список с разделителями-запятыми в SQL Server 2005?

Прямо сейчас у меня есть SQL-запрос вроде этого:

SELECT X, Y FROM POINTS

Он возвращает результаты следующим образом:

X    Y
----------
12   3
15   2
18   12
20   29

Я хотел бы возвращать результаты в одной строке, как это (подходит для использования в теге HTML <AREA> ):

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

Есть ли способ сделать это, используя только SQL?

Ответ 1

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)

Ответ 3

Используя трюк COALESCE, вам не нужно беспокоиться о конечной запятой:

DECLARE @XYList AS varchar(MAX) -- Leave as NULL

SELECT @XYList = COALESCE(@XYList + ',', '') + CONVERT(varchar, X) + ',' + CONVERT(varchar, Y)
FROM POINTS

Ответ 4

DECLARE @s VarChar(8000)
SET @s = ''

SELECT @s = @s + ',' + CAST(X AS VarChar) + ',' + CAST(Y AS VarChar) 
FROM POINTS

SELECT @s 

Просто избавьтесь от ведущей запятой