54

現在、次のような SQL クエリがあります。

SELECT X, Y FROM POINTS

次のような結果が返されます。

X    Y
----------
12   3
15   2
18   12
20   29

次のように、結果をすべて 1 行で返したいと思います (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 に答える