串联列值到一个逗号分隔的列表串联列值到一个逗号分隔的列表(Concatenating Column

2019-05-13 21:36发布

什么是TSQL语法,所以列值显示为一个字符串,用逗号分隔的格式化我的输出。

例如,我的表CARS有以下几点:

CarID    CarName  
----------------
    1    Porsche  
    2    Mercedes  
    3    Ferrari  

如何让汽车名称为: Porsche, Mercedes, Ferrari

Answer 1:

您可以通过做一个快捷方式coalesce到表从记录串连一系列字符串,例如。

declare @aa varchar (200)
set @aa = ''

select @aa = 
    case when @aa = ''
    then CarName
    else @aa + coalesce(',' + CarName, '')
    end
  from Cars

print @aa


Answer 2:

SELECT LEFT(Car, LEN(Car) - 1)
FROM (
    SELECT Car + ', '
    FROM Cars
    FOR XML PATH ('')
  ) c (Car)


Answer 3:

为此,您可以使用的东西:

SELECT Stuff(
    (
    SELECT ', ' + CARS.CarName
    FROM CARS
    FOR XML PATH('')
    ), 1, 2, '') AS CarNames


Answer 4:

如果你的SQL Server 2017年或SQL Azure的数据库上运行,你做这样的事情:

 SELECT STRING_AGG(CarName,',') as CarNames
 FROM CARS 


Answer 5:

在查询中另一种解决方案:

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

(编辑:感谢@ user007为STUFF声明)



Answer 6:

DECLARE @CarList nvarchar(max);
SET @CarList = N'';
SELECT @CarList+=CarName+N','
FROM dbo.CARS;
SELECT LEFT(@CarList,LEN(@CarList)-1);

由于是因谁的SO向我展示了一个使用查询期间累计数据。



Answer 7:

 DECLARE @SQL AS VARCHAR(8000)
SELECT @SQL = ISNULL(@SQL+',','') + ColumnName FROM TableName
SELECT @SQL


Answer 8:

请用下面的代码试试这个:

DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' , '') + CarName
FROM Cars
SELECT @listStr


文章来源: Concatenating Column Values into a Comma-Separated List