9

我有这种格式的表值

sam
jack
sam
john

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

我怎样才能获得独特的价值

sam,jack,john

像这样。

4

6 回答 6

23

您可以将 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语法返回一个连接的字符串。对 SO 的搜索会返回多个结果,您可以将其用作示例。

于 2012-07-13T09:28:12.450 回答
3

干得好

Declare @name varchar(max) 
select 
    @name = COALESCE(@name + ', ','')+name from (select distinct user_email 
from 
    PostedCommentMaster) as t
where 
    article_id = @id
于 2012-07-13T09:27:53.563 回答
2

您可以使用group by唯一值。

Declare @name varchar(max)
select @name = COALESCE(@name + ', ','')+ user_email 
from   PostedCommentMaster where article_id = @id 
group by user_email
于 2015-09-09T07:25:05.950 回答
0

最好你可以使用这个。

Declare @name varchar(max)
select @name = COALESCE(@name + ', ','')+ user_email  from (select distinct user_email 
from   PostedCommentMaster where article_id = @id ) as tblTemp
于 2018-10-25T08:54:25.977 回答
0

SELECT distinct @name = COALESCE(@name + ', ','')+ user_email from PostedCommentMaster where article_id = @id

于 2018-12-03T18:18:54.740 回答
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
    

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

于 2019-01-16T07:19:04.987 回答