Сгруппировать и объединить много строк в одну
Я хочу "объединить" все строки "Текст" в одну строку и получить в результате одну строку. Это вообще возможно? Я использую 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