Сгруппировать и объединить много строк в одну

Я хочу "объединить" все строки "Текст" в одну строку и получить в результате одну строку. Это вообще возможно? Я использую MSSQL Server 2005.

запрос

3 ответа

Решение

Использовать FOR XML PATH:

SELECT [Text]+' ' AS 'text()' FROM _table FOR XML PATH('')

Другой вариант - использовать конкатенацию строк:

DECLARE @s nvarchar(max)
SELECT @s = ISNULL(@s, '') + t + ' '  FROM _table OPTION (MAXDOP 1)
SELECT @s

Обратите внимание, что последний не гарантированно работает, на самом деле, официально поведение "@s = @s + ..." для многострочного набора результатов не определено.
MAXDOP 1 здесь используется подсказка, чтобы не дать оптимизатору создать план выполнения parralel, поскольку это наверняка даст неверный результат.

Я считаю, что вы ищете что-то вроде этого:

DECLARE @string nvarchar(max)
SET @string = N''

SELECT @string = @string + [Text] + N' ' FROM [YourTable]

SELECT @string

Это объединит все значения для столбца [Text] в одну переменную. Затем вы можете выбрать переменную, чтобы получить все значения в одной строке.

Что-то вроде:

DECLARE @result varchar(max)

SELECT @result = COALESCE(@result + ' ','') +[Text] FROM [Table]
SELECT @result
Другие вопросы по тегам