如果在 SSMS 中不满足条件,则 Where 子句 returns 没有任何内容

Where clause returns nothing if condition is not met in SSMS

这是我在 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”子句未成功满足,我对该查询的要求是 return 在提到的列中为 null。

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

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

您需要条件聚合,而不是您的 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)