包括一个值的所有值并过滤另一个值

Including all of one value and filtering another

我想包括每个状态的所有问题,但仅当 DateResolved 在过去 5 天内包括状态为 'Closed' 的问题。包括 DateResolved IS NULL 的所有其他状态值。

数据:

IssueStatus DateResolved
Closed      7/25/2021
Closed      7/26/2021
Closed      7/1/2021
In Progress 
Deferred    
Deferred

这 returns 仅 IssueStatus = 'Closed' 最近 5 天内。

SELECT IssueStatus, DateResolved FROM TABLE
WHERE IssueStatus IN ('Closed','In Progress','Deferred')
AND DateResolved >= DATEADD(d, -5, CAST(GETDATE() AS DATE)) 

期望的结果:

IssueStatus DateResolved
Closed      7/25/2021
Closed      7/26/2021
In Progress 
Deferred    
Deferred

您需要 OR:

SELECT IssueStatus, DateResolved FROM TABLE
WHERE IssueStatus IN ('In Progress','Deferred')
   OR (IssueStatus = 'Closed'
  AND  DateResolved >= DATEADD(d, -5, CAST(GETDATE() AS DATE)))

如果不想明确列出要包含的 IssueStatus,那么您可以尝试这样的操作

SELECT IssueStatus, DateResolved 
FROM [TABLE]
WHERE (IssueStatus='Closed'
       AND DateResolved >= DATEADD(d, -5, CAST(GETDATE() AS DATE)))
      OR IssueStatus<>'Closed';

最简单的WHERE子句大概是:

WHERE DateResolved >= DATEADD(day, -5, CAST(GETDATE() AS DATE) OR
      IssueStatus <> 'Closed';

您不需要明确检查过去五天的“关闭”。换句话说,您可以将您想要的表述为:“在过去五天内具有解决日期或未关闭问题的所有行”。