【问题标题】:Select Distinct Case Query选择不同案例查询
【发布时间】:2020-05-13 18:58:15
【问题描述】:

我有以下查询

SELECT Distinct dbo.WSUS_ComputerUpdateStatusWithApprovals.fulldomainname AS [Computer Name]
  ,dbo.WSUS_ComputerUpdateStatusWithApprovals.title AS [Update Title]
  ,count((case when (DATEDIFF(day, [ArrivalDate], GetDate())) > '0' and (DATEDIFF(day, [ArrivalDate], GetDate())) < '31' Then '' End)) AS 'Green'
  ,count((case when (DATEDIFF(day, [ArrivalDate], GetDate())) > '31' and (DATEDIFF(day, [ArrivalDate], GetDate())) < '91' then '' End)) AS 'Yellow'
  ,count((case when (DATEDIFF(day, [ArrivalDate], GetDate())) > '90' then '' End)) AS 'Red'
  ,DATEDIFF(day, [ApprovalCreationDate], GetDate()) AS 'DaysOldSinceApproval'
FROM dbo.WSUS_ComputerUpdateStatusWithApprovals 
WHERE dbo.WSUS_ComputerUpdateStatusWithApprovals.IsApproved = 1 
Group by dbo.WSUS_ComputerUpdateStatusWithApprovals.fulldomainname 
,[ArrivalDate] 
,dbo.WSUS_ComputerUpdateStatusWithApprovals.ApprovalCreationDate
,dbo.WSUS_ComputerUpdateStatusWithApprovals.title
ORDER BY  dbo.WSUS_ComputerUpdateStatusWithApprovals.fulldomainname ASC

结果集是这样出来的:

我希望它显示计算机名称和每个绿色、黄色、红色的总数。所以在这种情况下,计算机名称,绿色 = 3,黄色 = 1 和红色 = 1。我包括标题和天数以显示更多信息。

【问题讨论】:

    标签: sql sql-server tsql group-by count


    【解决方案1】:

    如果我没听错的话,你只需要更改group by 子句,让它为每个fulldomainname 生成一行:

    select 
        fulldomainname AS [Computer Name],
        sum(case when datediff(day, [ArrivalDate], GetDate()) between 1  and 30 then 1 else 0 end) AS Green,
        sum(case when datediff(day, [ArrivalDate], GetDate()) between 30 and 90 then 1 else 0 end) AS Yellow,
        sum(case when datediff(day, [ArrivalDate], GetDate()) > 90              then 1 else 0 end) AS Red
    from dbo.WSUS_ComputerUpdateStatusWithApprovals 
    where IsApproved = 1 
    group by fulldomainname 
    order by fulldomainname ASC
    

    请注意,我将条件聚合逻辑更改为使用sum() 而不是count(),因为它看起来更容易理解。

    【讨论】:

    • 谢谢,效果很好,但我从中提取的表似乎有所有 Windows 更新的重复条目,有没有办法过滤掉每个“标题”的第一次出现?因此,每个 Windows 更新条目都有 2+ 行。
    • 所以不是完全重复的行,它们有一个名为 Approval ID 的列,在两行之间是不同的。这就是 Select Distinct 不起作用的原因。
    猜你喜欢
    • 2019-11-21
    • 2014-07-29
    • 2015-08-16
    • 2021-08-12
    • 2017-03-20
    • 2015-11-11
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多