2012-07-13 104 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