将列值连接到逗号分隔列表中

什么是TSQL语法格式化我的输出,以便列值显示为一个string,由逗号分隔。

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

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

我如何获得汽车名称: Porsche, Mercedes, Ferrari

例如,可以使用coalesce来连接表中logging的一系列string。

 declare @aa varchar (200) set @aa = '' select @aa = case when @aa = '' then CarName else @aa + coalesce(',' + CarName, '') end from Cars print @aa 
 SELECT LEFT(Car, LEN(Car) - 1) FROM ( SELECT Car + ', ' FROM Cars FOR XML PATH ('') ) c (Car) 

你可以用这个东西来做

 SELECT Stuff( ( SELECT ', ' + CARS.CarName FROM CARS FOR XML PATH('') ), 1, 2, '') AS CarNames 
 DECLARE @CarList nvarchar(max); SET @CarList = N''; SELECT @CarList+=CarName+N',' FROM dbo.CARS; SELECT LEFT(@CarList,LEN(@CarList)-1); 

非常感谢谁在SO上向我展示了在查询过程中使用累积数据的情况。

查询中的另一个解决scheme:

 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声明)

如果您在SQL Server 2017或Azure SQL数据库上运行,则可以这样做:

  SELECT STRING_AGG(CarName,',') as CarNames FROM CARS 
  DECLARE @SQL AS VARCHAR(8000) SELECT @SQL = ISNULL(@SQL+',','') + ColumnName FROM TableName SELECT @SQL 

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

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