Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在COALESCE()中获得不同的值_Sql_Sql Server - Fatal编程技术网

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

Sql 如何在COALESCE()中获得不同的值,sql,sql-server,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 像这样。给你 Declare @name varchar(max) select @name = COALESC

我有这种格式的表值

sam
jack
sam
john

Declare @name varchar(max)
select @name = COALESCE(@name + ', ','')+ user_email 
from   PostedCommentMaster where article_id = @id
我怎样才能得到不同的值

sam,jack,john
像这样。

给你

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

您可以将select语句包装到子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
语法返回串联字符串。返回多个可作为示例使用的结果。

您可以使用
分组依据
获取唯一值

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

你最好用这个

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

选择不同的@name=COALESCE(@name+,,'')+user\u电子邮件
从PostedCommentMaster那里,文章_id=@id

我被困在同一个问题上。所以我的解决办法是-

  • 创建一个临时表
  • 在#temp表中插入不同的值
  • 添加合并查询

    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
    
    这也有助于使用联接从多个表中获取数据


  • 为什么在这里使用
    COALESCE
    ?首先声明@name变量,然后立即检查它是否为null。它将始终为null,因为它永远不会被设置为anything@paul-这是从resultset连接列的一种(未记录的)方法。我明白了,所以
    @name
    实际上是根据返回的行重新计算的。聪明,欢迎来到StackOverflow!我们更喜欢代码答案附带一些解释,说明为什么代码解决了问题。此外,请考虑使用以提高可读性。