现在,我有一个类似于这样的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就能完成这个操作的方法?
现在,我有一个类似于这样的SQL查询:
SELECT X, Y FROM POINTS
X Y
----------
12 3
15 2
18 12
20 29
XYLIST
----------
12,3,15,2,18,12,20,29
有没有一种只使用SQL就能完成这个操作的方法?
谢谢大家快速且有帮助的回答!
我刚刚又发现了另一种快速完成这件事的方法:
SELECT STUFF(( SELECT ',' + X + ',' + Y
FROM Points
FOR
XML PATH('')
), 1, 1, '') AS XYList
感谢这位大佬:
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 @List = @List + CONVERT(varchar, ID) + ',' FROM LinkedServer.MyDatabase.dbo.MyTable
它总是只返回一个ID。而 Select *
返回许多ID。 - Martin从SQL 2017开始,您可以使用STRING_AGG
函数
SELECT STRING_AGG (X + ',' + Y, ',') AS XYLIST
FROM POINTS
https://learn.microsoft.com/zh-cn/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-2017
使用 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
只需去掉前导逗号即可