我怎样才能获得不同的值在COALESCE()
问题描述:
我在这个格式我怎样才能获得不同的值在COALESCE()
sam
jack
sam
john
Declare @name varchar(max)
select @name = COALESCE(@name + ', ','')+ user_email
from PostedCommentMaster where article_id = @id
表值我怎样才能获得明显的价值
sam,jack,john
这样。
答
你可以用select语句为子查询,并将结果应用于聚结。
Declare @name varchar(max)
select @name = COALESCE(@name + ', ','') + user_email
from (select distinct user_email
from PostedCommentMaster
where article_id = @id) pc
注意,这里使用的SQL Server的无证功能来连接的结果成一个字符串。虽然我再也找不到链接了,但我记得,你不应该依赖这种行为。
一个更好的替代方法是使用FOR XML
语法返回一个连接字符串。 A search on SO返回,你可以作为一个例子使用多个结果。
+0
它的工作谢谢.. – 2012-07-13 09:40:59
答
在这里你去
Declare @name varchar(max)
select
@name = COALESCE(@name + ', ','')+name from (select distinct user_email
from
PostedCommentMaster) as t
where
article_id = @id
答
可以使用group by
唯一值。
Declare @name varchar(max)
select @name = COALESCE(@name + ', ','')+ user_email
from PostedCommentMaster where article_id = @id
group by user_email
为什么你使用'COALESCE'这里?你首先声明@name变量,然后立即检查它是否为空。这将永远是空的,因为它永远不会设置为任何 – paul 2012-07-13 09:33:44
@保罗 - 这是一个(无证)的方式从ResultSet连接一列。 – 2012-07-13 09:34:46
我明白了,所以'@ name'实际上是每行重新评估返回。聪明。 – paul 2012-07-13 09:38:25