Объединение значений столбцов в разделенный запятыми список
Что такое синтаксис TSQL для форматирования моего вывода, чтобы значения столбца отображались как строка, разделенная запятыми.
Например, моя таблица CARS имеет следующее:
CarID CarName
----------------
1 Porsche
2 Mercedes
3 Ferrari
Как мне получить названия автомобилей как: Porsche, Mercedes, Ferrari
Ответы
Ответ 1
Вы можете сделать ярлык, используя coalesce
, чтобы объединить ряд строк из записи в таблице, например.
declare @aa varchar (200)
set @aa = ''
select @aa =
case when @aa = ''
then CarName
else @aa + coalesce(',' + CarName, '')
end
from Cars
print @aa
Ответ 2
SELECT LEFT(Car, LEN(Car) - 1)
FROM (
SELECT Car + ', '
FROM Cars
FOR XML PATH ('')
) c (Car)
Ответ 3
Вы можете сделать это, используя материал:
SELECT Stuff(
(
SELECT ', ' + CARS.CarName
FROM CARS
FOR XML PATH('')
), 1, 2, '') AS CarNames
Ответ 4
Если вы работаете в SQL Server 2017 или Azure SQL Database, вы делаете что-то вроде этого:
SELECT STRING_AGG(CarName,',') as CarNames
FROM CARS
Ответ 5
DECLARE @CarList nvarchar(max);
SET @CarList = N'';
SELECT @CarList+=CarName+N','
FROM dbo.CARS;
SELECT LEFT(@CarList,LEN(@CarList)-1);
Спасибо, что кто-то из SO показал мне использование накопления данных во время запроса.
Ответ 6
Другое решение в запросе:
select
Id,
STUFF(
(select (', "' + od.ProductName + '"')
from OrderDetails od (nolock)
where od.Order_Id = o.Id
order by od.ProductName
FOR XML PATH('')), 1, 2, ''
) ProductNames
from Orders o (nolock)
where o.Customer_Id = 525188
order by o.Id desc
(EDIT: thanks @user007 для объявления STUFF)
Ответ 7
DECLARE @SQL AS VARCHAR(8000)
SELECT @SQL = ISNULL(@SQL+',','') + ColumnName FROM TableName
SELECT @SQL
Ответ 8
Попробуйте это со следующим кодом:
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' , '') + CarName
FROM Cars
SELECT @listStr