Как объединить несколько строк в список через запятую в SQL Server 2005? - PullRequest
41 голосов
/ 07 октября 2008

Сейчас у меня есть SQL-запрос, подобный этому:

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?

Ответы [ 5 ]

70 голосов
/ 08 октября 2008

Спасибо за быстрые и полезные ответы, ребята!

Я только что нашел другой быстрый способ сделать это:

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

25 голосов
/ 07 октября 2008
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)
11 голосов
/ 08 октября 2008

Используя трюк COALESCE, вам не нужно беспокоиться о запятой:

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

SELECT @XYList = COALESCE(@XYList + ',', '') + CONVERT(varchar, X) + ',' + CONVERT(varchar, Y)
FROM POINTS
4 голосов
/ 11 июля 2018

Начиная с 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

1 голос
/ 07 октября 2008
DECLARE @s VarChar(8000)
SET @s = ''

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

SELECT @s 

Просто избавься от запятой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...