使用COALESCE函数以逗号分隔值

hap*_*ile 25 sql-server

我有一个表(EMP)我知道使用该COALESCE函数我们可以通过这种方式获取任何列的值

23,23,45,34

SELECT OfferID  FROM Emp where EmpID= 23
Run Code Online (Sandbox Code Playgroud)

但我没有得到实现这一点的语法

解决这个问题的任何帮助都会很棒.

dkn*_*ack 43

描述

COALESCE在过去也使用过这个,但我建议另一种方法,因为你不需要变量.使用该T-SQL功能STUFF完成此操作.

样品

SELECT STUFF((
    select ','+ cast(OfferID as nvarchar(255)) 
    from Emp b
    WHERE a.EmpID= b.EmpID
    FOR XML PATH('')
    ),1,1,'') AS COLUMN2
FROM Emp a
GROUP BY a.EmpID
Run Code Online (Sandbox Code Playgroud)

更多信息

STUFF(Transact-SQL)

  • +1 - 比`COALESCE`解决方案好得多. (2认同)

Mar*_*ith 40

DECLARE @List VARCHAR(8000)

SELECT @List = COALESCE(@List + ',', '') + CAST(OfferID AS VARCHAR)
FROM   Emp
WHERE  EmpID = 23

SELECT @List 
Run Code Online (Sandbox Code Playgroud)

这种聚合连接方法不能保证有效.如果您至少使用SQL Server 2005 XML PATH或CLR聚合是首选.

关于这个主题的权威文章是Transact-SQL中的Concatenating Row Values

  • 是的,有时候很麻烦。当点击数等于世界人口时,他们可能会删除它们。 (2认同)