2008-10-07 31 views
34

现在,我有一个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?

+0

如果你想要你的应用程序的规模,它窝最好在数据库之外做这种事情。数据库几乎总是你的瓶颈。 – 2008-10-07 19:51:07

+0

我想知道为什么好的答案消失了? – 2008-10-07 20:01:19

+0

@Joseph Bui - 相信我,我知道。不幸的是,项目负责人坚持我这样做。 – 2008-10-07 20:27:21

回答

22
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) 
+0

是我还是不在链接的服务器上工作?当我尝试类似于`SELECT @List = @List + CONVERT(varchar,ID)+',' FROM LinkedServer.MyDatabase.dbo.MyTable`时,它总是只返回一个ID。一个`Select *`返回许多ID。 – Martin 2014-11-05 13:42:17

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

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

SELECT @s 

刚刚摆脱领先逗号

+0

虽然如此......这并没有摆脱领先的逗号? – rainabba 2017-06-01 17:43:48

9

使用COALESCE招,你不必担心尾随逗号:

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

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