【问题标题】:Where clause returns nothing if condition is not met in SSMS如果在 SSMS 中不满足条件,where 子句不返回任何内容
【发布时间】:2021-04-22 16:45:16
【问题描述】:

这是我在 SS Management Studio 中的查询

    SELECT PersonnelID, Name, EmpStartCalc,
    MAX(PositionDetailsValidFromCalc) PD , 
    Max(PositionHierValidFromCalc) PH, 
    Max(PWAValidFromCalc) Position, 
    Max(RowId) As RowId
    
    FROM TV_IAMintegration_VW
    
    where 
    EmpStartCalc >= 20200101 and
    EmpStartCalc <= 20200131 and
    
    ((20200131 > PositionDetailsValidFromCalc And 
    20200101 < PositionDetailsValidToCalc) or
    PositionDetailsValidToCalc is null)
    
    GROUP BY PersonnelID, Name, EmpStartCalc
    

如果“WHERE”子句没有成功满足,我对这个查询的要求是在提到的列中返回 null。

MAX(PositionDetailsValidFromCalc) PD , Max(PositionHierValidFromCalc) PH, Max(PWAValidFromCalc) Position

该行的其余部分应保持原样。

【问题讨论】:

  • 附带问题,您是否将日期存储为整数?为什么不是日期数据类型?
  • 在 PowerApps 中使用它们作为整数进行计算,在 PowerApps 中我们对日期比较和计算有一些限制。

标签: sql-server null case aggregate-functions where-clause


【解决方案1】:

您需要条件聚合,而不是您的 WHERE(您需要删除它)。

所以每个MAX 应该是这样的:

MAX (CASE WHEN
    EmpStartCalc >= 20200101 and
    EmpStartCalc <= 20200131 and
    
    ((20200131 > PositionDetailsValidFromCalc And 
    20200101 < PositionDetailsValidToCalc) or
    PositionDetailsValidToCalc is null)
    THEN whatever_value_you_want_here END)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 2012-04-22
    • 1970-01-01
    相关资源
    最近更新 更多