使用COALESCE函数使用逗号分隔值

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

 23,23,45,34 SELECT OfferID FROM Emp where EmpID= 23 

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

任何帮助将是伟大的,解决这个问题。

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

这种聚合连接的方法不能保证工作 。 如果您至less使用SQL Server 2005 XML PATH或CLR聚合是首选。

关于此主题的权威性文章是Transact-SQL中的连接行值

描述

我在过去也使用了COALESCE ,但是我build议另一种方法,因为你不需要variables。 使用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 

更多信息

STUFF(Transact-SQL)

描述

dknaack解决scheme有一些缺点,当文本包含一些像XML这样的XML字符时,它们被标记为< 。 这可以使用TYPE指令来解决,该指令以xml TYPE发送响应,然后以stringforms提取原始value

本文中有更多的解决scheme来解决这个问题: 连接T-SQL中的行值

样品

 SELECT STUFF(( select ','+ cast(OfferID as nvarchar(255)) from Emp b WHERE a.EmpID= b.EmpID FOR XML PATH(''), TYPE ).value('.', 'varchar(max)') ,1,1,'') AS COLUMN2 FROM Emp a GROUP BY a.EmpID 

Isnull函数也会给我们相同的结果

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