如何在COALESCE中获取不同的值()

时间:2012-07-13 09:25:54

标签: sql sql-server

我有这种格式的表格值

sam
jack
sam
john

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

我如何获得不同的价值

sam,jack,john
像这样。

6 个答案:

答案 0 :(得分:19)

您可以将select语句包装到子选择中并对结果应用coalesce。

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会返回您可以用作示例的多个结果。

答案 1 :(得分:3)

你去吧

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

答案 2 :(得分:0)

您可以将group by用于唯一值。

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

答案 3 :(得分:0)

最好,您可以使用这个。

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

答案 4 :(得分:0)

选择不同的@name = COALESCE(@name +',','')+ user_email 来自PostCommentMaster,其中article_id = @id

答案 5 :(得分:0)

我在同一问题上陷入困境。因此,我的解决方案是-

  1. 创建#temp表。
  2. 将不同的值插入#temp表中。
  3. 添加合并查询。

    create table #emailList (user_email varchar(200))
    insert into #emailList select distinct user_email from   PostedCommentMaster 
    where article_id = @id
    
    Declare @name varchar(max)
    select @name = COALESCE(@name + ', ','')+ user_email 
    from   #emailList
    

    这也有助于使用联接从多个表中获取数据。