提问人:Joshua Carmody 提问时间:10/8/2008 最后编辑:Joshua Carmody 更新时间:8/6/2022 访问量:95022
如何在 SQL Server 2005 中将多行合并到逗号分隔的列表中?
How can I combine multiple rows into a comma-delimited list in 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来做到这一点?
答:
2赞
Peter
10/8/2008
#1
DECLARE @s VarChar(8000)
SET @s = ''
SELECT @s = @s + ',' + CAST(X AS VarChar) + ',' + CAST(Y AS VarChar)
FROM POINTS
SELECT @s
只需去掉前导逗号即可
31赞
Ben Hoffstein
10/8/2008
#2
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赞
Martin
11/5/2014
是我还是这在链接服务器上不起作用?当我尝试类似的东西时,它总是只返回一个 ID。A 返回多个 ID。SELECT @List = @List + CONVERT(varchar, ID) + ',' FROM LinkedServer.MyDatabase.dbo.MyTable
Select *
101赞
Joshua Carmody
10/8/2008
#3
感谢您的快速和有用的答案!
我也找到了另一种快速的方法来做到这一点:
SELECT STUFF(( SELECT ',' + X + ',' + Y
FROM Points
FOR
XML PATH('')
), 1, 1, '') AS XYList
功劳归于这个人:
评论
0赞
Tai Kahar
10/23/2012
我真的很喜欢这个解决方案。易于使用,只需一行即可添加到任何 SQL 中。
2赞
SvdSinner
5/1/2018
注意:此方法会导致特殊字符替换为其等效的 XML 字符。IOW,Barnes & Noble 更名为 Barnes &高贵
15赞
Cade Roux
10/8/2008
#4
使用这个技巧,您不必担心尾随逗号:COALESCE
DECLARE @XYList AS varchar(MAX) -- Leave as NULL
SELECT @XYList = COALESCE(@XYList + ',', '') + CONVERT(varchar, X) + ',' + CONVERT(varchar, Y)
FROM POINTS
17赞
Carter Medlin
7/12/2018
#5
从 SQL 2017 开始,可以使用STRING_AGG
SELECT STRING_AGG (X + ',' + Y, ',') AS XYLIST
FROM POINTS
https://learn.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-2017
评论