Как объединить текст из нескольких строк в одну текстовую строку в SQL Server

Этот ответ может вернуть unexpected results. Для получения согласованных результатов используйте один из методов FOR XML PATH, подробно описанных в других ответах.

Используйте COALESCE:

DECLARE @Names VARCHAR(8000) 
SELECT @Names = COALESCE(@Names + ', ', '') + Name 
FROM People

Просто некоторые csv пояснения (поскольку этот .csv ответ, кажется, получает .csv относительно обычные просмотры):

  • Coalesce - это просто полезный чит, который выполняет две задачи:

1) Не group-concat нужно инициализировать @Names пустым sql строковым значением.

2) Не sqlselect нужно удалять лишний разделитель mssql в конце.

  • Приведенное выше решение даст неверные результаты, если строка имеет значение NULL Name (если есть NULL, NULL сделает @Names NULL после этой строки, и следующая строка снова будет начинаться как пустая строка. Легко исправить одним из двух решений:
DECLARE @Names VARCHAR(8000) 
SELECT @Names = COALESCE(@Names + ', ', '') + Name
FROM People
WHERE Name IS NOT NULL

или:

DECLARE @Names VARCHAR(8000) 
SELECT @Names = COALESCE(@Names + ', ', '') + 
    ISNULL(Name, 'N/A')
FROM People

В зависимости sql-server от того, какое поведение sqlselect вы хотите (первый вариант string-concatenation просто отфильтровывает NULL, второй sql вариант сохраняет их в списке sqlselect с помощью маркерного сообщения ms-sql-server [замените 'N / A' на то, что sql-server подходит для вы]).

sql

sql-server

csv

string-concatenation

group-concat

2022-11-20T20:14:52+00:00