【问题标题】:Include dates within 6 months of terminated employees while still displaying active employees SQL Server包括终止员工 6 个月内的日期,同时仍显示在职员工 SQL Server
【发布时间】:2020-05-19 08:25:57
【问题描述】:

我正在尝试在我的查询中包括终止日期在 6 个月之前的所有员工,同时还包括在职员工。我已经包括了以下内容,但这样做会过滤掉活跃的员工。我怎样才能做到这一点?

JOIN Employees1 e
    ON e.ClientID = c.ClientID
JOIN Employees2 d
    ON d.ClientID = e.ClientID
    AND d.EmployeeUID = e.EmployeeUID
    AND TerminationDate >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -6,current_timestamp)), 0)

另外,有没有办法将其返回到当前日期前 6 个月的确切日期,而不是包括 6 个月前的整个月份?

【问题讨论】:

    标签: sql-server join filter ssms


    【解决方案1】:

    如果您只想要活跃或满足条件的员工,则在FROM 子句中使用OR

    select e.*
    from employees e
    where e.TerminationDate >= DATEADD(month, -6, current_timestamp) OR
          e.TerminationDate IS NULL;
    

    【讨论】:

      【解决方案2】:

      与其在joins 中包含逻辑,不如尝试以下方法:

      SELECT
          e.*
      FROM
         Employees1 e
      WHERE
          e.TerminateDate IS NULL
      UNION ALL
      SELECT
          e1.*
      FROM
         Employees1 e1
      WHERE
          e1.TerminateDate >= DATEADD(m, -6, GetDate())
      
      
      

      甚至更好,请参阅 Gordon Linoff 的回答。

      【讨论】:

      • @BenTen。 . . UNION ALL 比必要的复杂。
      • @GordonLinoff 我必须同意你 +1
      • @PeterSmith 谢谢,我也同意。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 2020-09-09
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多