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我被困在同一个问题上。所以我的解决办法是-
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!我们更喜欢代码答案附带一些解释,说明为什么代码解决了问题。此外,请考虑使用以提高可读性。