SQL独特的列具有唯一的concat

时间:2017-01-31 13:49:48

标签: sql sql-server distinct concat

在SQL Server中,我有一个名为v_master_server_list的简单视图。

服务器条目具有多个组成员身份,因此每个组成员身份的视图中的服务器都将重复。我只需要返回一行具有不同服务器名称的行,并且对于每个组成员身份,我希望这与某种分隔符连接起来,例如' |'或','

我已经想出了这个(感谢链接),我不得不擦除空条目,否则LEN和LEFT函数将无法正常工作。问题是,我现在如何返回所有条目(即使在&_ 39; arms_group'中找不到任何内容)?

select server, LEFT(column_names, LEN(column_names )-1) AS column_names
from cmdb.[dbo].v_master_server_list AS extern
CROSS APPLY
(
    select arms_group + ','
    FROM cmdb.[dbo].v_master_server_list AS intern
    where extern.server = intern.server
    FOR XML PATH('')
) pre_trimmed (column_names)

where arms_group is not null
GROUP BY server, column_names;

1 个答案:

答案 0 :(得分:0)

您可以for xml使用Concatenate Row Values in Transact-SQL

select distinct
    group_membership
  , servers = stuff(
    (
      select distinct '|'+i.server_name
        from v_master_server_list as i
        where i.group_membership = o.group_membership
        order by i.server_name
      for xml path (''), type).value('.','varchar(max)')
      ,1,1,'')
  from v_master_server_list as o

在Sql Server vNext中,您可以使用string_agg()