使用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