【问题标题】:SQL distinct columns with a concat of unique [duplicate]SQL 不同的列具有唯一的 concat [重复]
【发布时间】:2017-06-16 23:43:49
【问题描述】:

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

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

我想出了这个(感谢链接),我必须清除空条目,否则 LEN 和 LEFT 函数将不起作用。问题是,我现在如何返回所有条目(即使在 '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;

【问题讨论】:

  • 你需要选择'name'DISTINCT,同时使用GROUP BY命令
  • 尝试 group by 并得到一个错误,它不包含在聚合函数或 group by 子句中
  • 能否请您显示一些代码,您是如何运行的?也给作为表结构
  • 您好,这里是视图的表结构,希望是您所需要的 -- postimg.org/image/ge3grtr59
  • 我正在尝试这个:从 v_master_server_list 组中选择不同的服务器,arms_group 按服务器并获取:Msg 8120, Level 16, State 1, Line 1 Column 'v_master_server_list.ARMS_Group' 在选择列表中无效因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

标签: sql sql-server distinct concat


【解决方案1】:

您可以使用for xmlConcatenate 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2017-04-23
    • 2021-12-23
    • 2021-11-01
    • 2014-03-13
    • 2013-08-10
    • 1970-01-01
    相关资源
    最近更新 更多