现在,我有一个SQL查询像这样的:如何将多行组合到SQL Server 2005中以逗号分隔的列表中?
SELECT X, Y FROM POINTS
它返回结果,像这样:
X Y
----------
12 3
15 2
18 12
20 29
我想返回结果都在一排,像这样的(适合使用在HTML <区>标签):
XYLIST
----------
12,3,15,2,18,12,20,29
有没有办法做到这一点只使用SQL?
现在,我有一个SQL查询像这样的:如何将多行组合到SQL Server 2005中以逗号分隔的列表中?
SELECT X, Y FROM POINTS
它返回结果,像这样:
X Y
----------
12 3
15 2
18 12
20 29
我想返回结果都在一排,像这样的(适合使用在HTML <区>标签):
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 @List = @List + CONVERT(varchar,ID)+',' FROM LinkedServer.MyDatabase.dbo.MyTable`时,它总是只返回一个ID。一个`Select *`返回许多ID。 – Martin 2014-11-05 13:42:17
DECLARE @s VarChar(8000)
SET @s = ''
SELECT @s = @s + ',' + CAST(X AS VarChar) + ',' + CAST(Y AS VarChar)
FROM POINTS
SELECT @s
刚刚摆脱领先逗号
虽然如此......这并没有摆脱领先的逗号? – rainabba 2017-06-01 17:43:48
感谢您的快速和有用的答案的家伙!
我刚刚发现了另一个快捷的方式做到这一点太:
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
如果你想要你的应用程序的规模,它窝最好在数据库之外做这种事情。数据库几乎总是你的瓶颈。 – 2008-10-07 19:51:07
我想知道为什么好的答案消失了? – 2008-10-07 20:01:19
@Joseph Bui - 相信我,我知道。不幸的是,项目负责人坚持我这样做。 – 2008-10-07 20:27:21