Как написать SQL для преобразования одной строки из нескольких строк? - PullRequest
1 голос
/ 02 марта 2011

Предположим, у меня есть таблица со следующими видами данных:

Tab(id, myString)
1  A
2  B
3  C
...

Я хочу, чтобы SQL мог вернуть все одну строку для всех значений в столбце myString. Итак, результат, который я хочу, выглядит так: «A, B, C»

Если я не хочу использовать курсор и хранимую процедуру, возможно ли sql получить такой результат?

Ответы [ 3 ]

2 голосов
/ 02 марта 2011

Комбинация использования FOR XML PATH (с указанием пустого имени элемента) и STUFF является распространенной техникой SQL Server (2005+).Он не требует объявления каких-либо локальных переменных и поэтому может быть запущен вне пакета или процедуры.

SELECT STUFF(
(SELECT ',' + t.myString
FROM TAB t
ORDER BY t.Id
FOR XML PATH('')),1,1,'') AS CSV
2 голосов
/ 02 марта 2011

Использовать конкатенацию строк T-SQL:

declare @s varchar(max)
set @s = ''
select @s = @s +
 case when @s = '' then '' else ', ' end + Letter
from MyTable

select @s

отредактировано удален трейлинг ","

1 голос
/ 03 марта 2011
Declare @tbl table(ID nvarchar(1),[myString] nvarchar(100))
Insert into @tbl values(1,'A'); 
Insert into @tbl values(2,'B'); 
Insert into @tbl values(3,'C'); 
DECLARE @CSVList varchar(100)

SELECT @CSVList = COALESCE(@CSVList + ' , ', '') + 
   [myString]
FROM @tbl


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