2012-07-13 65 views
5

我在这个格式我怎样才能获得不同的值在COALESCE()

sam 
jack 
sam 
john 

Declare @name varchar(max) 
select @name = COALESCE(@name + ', ','')+ user_email 
from PostedCommentMaster where article_id = @id 

表值我怎样才能获得明显的价值

sam,jack,john 

这样。

+0

为什么你使用'COALESCE'这里?你首先声明@name变量,然后立即检查它是否为空。这将永远是空的,因为它永远不会设置为任何 – paul 2012-07-13 09:33:44

+0

@保罗 - 这是一个(无证)的方式从ResultSet连接一列。 – 2012-07-13 09:34:46

+1

我明白了,所以'@ name'实际上是每行重新评估返回。聪明。 – paul 2012-07-13 09:38:25

回答

15

你可以用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

3

在这里你去

Declare @name varchar(max) 
select 
    @name = COALESCE(@name + ', ','')+name from (select distinct user_email 
from 
    PostedCommentMaster) as t 
where 
    article_id = @id 
0

可以使用group by唯一值。

Declare @name varchar(max) 
select @name = COALESCE(@name + ', ','')+ user_email 
from PostedCommentMaster where article_id = @id 
group by user_email