54

现在,我有一个这样的 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 来做到这一点?

4

5 回答 5

98

感谢您提供快速而有用的答案!

我刚刚找到了另一种快速的方法来做到这一点:

SELECT  STUFF(( SELECT ',' + X + ',' + Y
                FROM Points
              FOR
                XML PATH('')
              ), 1, 1, '') AS XYList

归功于这个人:

http://geekswithblogs.net/mnf/archive/2007/10/02/t-sql-user-defined-function-to-concatenate-column-to-csv-string.aspx

于 2008-10-07T20:55:02.363 回答
31
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)
于 2008-10-07T19:48:10.470 回答
15

使用这个COALESCE技巧,您不必担心结尾的逗号:

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

SELECT @XYList = COALESCE(@XYList + ',', '') + CONVERT(varchar, X) + ',' + CONVERT(varchar, Y)
FROM POINTS
于 2008-10-08T03:40:23.247 回答
11

从 SQL 2017 开始,您可以使用STRING_AGG

SELECT STRING_AGG (X + ',' + Y, ',') AS XYLIST
FROM POINTS

https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-2017

于 2018-07-11T17:27:16.883 回答
1
DECLARE @s VarChar(8000)
SET @s = ''

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

SELECT @s 

只需去掉前面的逗号

于 2008-10-07T19:47:19.833 回答