Ответ 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)
Прямо сейчас у меня есть 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?
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)
Спасибо за быстрые и полезные ответы ребята!
Я просто нашел еще один быстрый способ сделать это:
SELECT STUFF(( SELECT ',' + X + ',' + Y
FROM Points
FOR
XML PATH('')
), 1, 1, '') AS XYList
Кредит идет к этому парню:
Используя трюк COALESCE
, вам не нужно беспокоиться о конечной запятой:
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
Просто избавьтесь от ведущей запятой