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

Mur*_*i B 58 t-sql sql-server

什么是格式化输出的TSQL语法,以便列值显示为字符串,用逗号分隔.

例如,我的表CARS具有以下内容:

CarID    CarName  
----------------
    1    Porsche  
    2    Mercedes  
    3    Ferrari  
Run Code Online (Sandbox Code Playgroud)

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

Lie*_*ers 64

SELECT LEFT(Car, LEN(Car) - 1)
FROM (
    SELECT Car + ', '
    FROM Cars
    FOR XML PATH ('')
  ) c (Car)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.我从未见过这种命名子查询列的语法.我想知道你是否可以编辑你的答案,包括允许这个的那部分TSQL语法? (4认同)

Con*_*lls 46

例如,您可以使用coalesce连接表中记录的一系列字符串来创建快捷方式.

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

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

print @aa
Run Code Online (Sandbox Code Playgroud)


Vai*_*v D 24

你可以用东西做到这一点:

SELECT Stuff(
    (
    SELECT ', ' + CARS.CarName
    FROM CARS
    FOR XML PATH('')
    ), 1, 2, '') AS CarNames
Run Code Online (Sandbox Code Playgroud)


gpa*_*kis 15

如果您在SQL Server 2017或Azure SQL数据库上运行,则执行以下操作:

 SELECT STRING_AGG(CarName,',') as CarNames
 FROM CARS 
Run Code Online (Sandbox Code Playgroud)

  • 是时候创建这个函数了! (2认同)

Emr*_*gan 10

查询中的另一个解决方案:

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
Run Code Online (Sandbox Code Playgroud)

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


Joh*_*ers 9

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

非常感谢SO上的任何人向我展示了在查询期间使用累积数据的情况.


Rah*_*ava 8

请使用以下代码尝试一下:

DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' , '') + CarName
FROM Cars
SELECT @listStr
Run Code Online (Sandbox Code Playgroud)


Use*_*ser 5

 DECLARE @SQL AS VARCHAR(8000)
SELECT @SQL = ISNULL(@SQL+',','') + ColumnName FROM TableName
SELECT @SQL
Run Code Online (Sandbox Code Playgroud)