如果在 SSMS 中不满足条件,where 子句不返回任何内容

Posted

技术标签:

【中文标题】如果在 SSMS 中不满足条件,where 子句不返回任何内容【英文标题】:Where clause returns nothing if condition is not met in SSMS 【发布时间】: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 中我们对日期比较和计算有一些限制。 【参考方案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)

【讨论】:

以上是关于如果在 SSMS 中不满足条件,where 子句不返回任何内容的主要内容,如果未能解决你的问题,请参考以下文章

Where 子句基于优先级

将过程参数传递给 SELECT INTO where 子句不起作用

案例语句在 PSQUERY Where 子句中不起作用

如果需要运算符的 where 子句中的条件

SQL查询where子句如果没有匹配记录则省略

使用 SSMS 在 where 子句中的每个 id 之前放置逗号