現在、次のような 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のみを使用してこれを行う方法はありますか?
現在、次のような 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のみを使用してこれを行う方法はありますか?
迅速で役立つ回答をありがとう!
これを行う別の高速な方法も見つけました。
SELECT STUFF(( SELECT ',' + X + ',' + Y
FROM Points
FOR
XML PATH('')
), 1, 1, '') AS XYList
クレジットはこの男に行きます:
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)
このCOALESCE
トリックを使用すると、末尾のコンマを気にする必要はありません。
DECLARE @XYList AS varchar(MAX) -- Leave as NULL
SELECT @XYList = COALESCE(@XYList + ',', '') + CONVERT(varchar, X) + ',' + CONVERT(varchar, Y)
FROM POINTS
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
DECLARE @s VarChar(8000)
SET @s = ''
SELECT @s = @s + ',' + CAST(X AS VarChar) + ',' + CAST(Y AS VarChar)
FROM POINTS
SELECT @s
先頭のコンマを取り除くだけです