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

11 浏览
0 Comments

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

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

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

但我不知道如何使用语法来实现这一点

希望能得到帮助,解决这个问题。

0
0 Comments

使用COALESCE函数将值用逗号分隔是一种常见的需求。例如,在一个表中,我们可能有一个包含多个值的列,我们希望将这些值用逗号分隔并显示在一个单独的列中。

然而,在SQL Server中,没有直接的函数可以实现这个目标。幸运的是,有一种解决方法可以使用COALESCE函数来实现这个目标。

问题的出现是因为当文本中包含一些XML字符(如<)时,会被html实体化为&lt;。这个问题可以通过使用TYPE指令将响应发送为xml,然后将原始值提取为字符串来解决。

下面是一种解决方法的示例代码:

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

在这个示例代码中,我们使用COALESCE函数将多个OfferID值用逗号分隔并显示在一个名为COLUMN2的列中。我们首先使用FOR XML PATH('')将多个OfferID值连接在一起,然后使用TYPE将响应发送为xml。最后,我们使用value函数提取原始值作为字符串,并使用STUFF函数将第一个逗号替换为空字符串。

这样,我们就可以使用COALESCE函数将多个值用逗号分隔并显示在一个单独的列中。这种解决方法非常灵活,可以适用于各种情况下的值分隔需求。

0
0 Comments

使用COALESCE函数将值用逗号分隔的问题的出现原因是在过去也使用了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

更多信息请参考:[STUFF (Transact-SQL)](http://msdn.microsoft.com/en-us/library/ms188043.aspx)

+1 - 我也认为这种方法比COALESCE更好。在使用COALESCE时,我得到了所有行中的所有数字。而在这种方法中,我只得到了一个唯一行的所有数字。谢谢。

0
0 Comments

使用COALESCE函数将值用逗号分隔开的方法在某些情况下并不保证有效。如果您使用的是至少SQL Server 2005版本,建议使用XML PATH或CLR聚合函数。

这个问题的解决方法可以参考Concatenating Row Values in Transact-SQL这篇文章。

对于这个问题,微软的支持文章可能不再保留。可能是当点击次数超过全球人口数量时,他们会删除这些文章。

是的,有时候这真的很烦人。他们可能会在点击次数达到全球人口数量时删除这些文章。

文章来源:https://web.archive.org/web/20080203143315/http://support.microsoft.com/kb/287515

0