【问题标题】:Return null in aggregate column if where clause returns nothing [duplicate]如果 where 子句不返回任何内容,则在聚合列中返回 null [重复]
【发布时间】:2021-01-12 14:41:53
【问题描述】:

我在 MsSQL 中有这个查询

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
    
ORDER BY PersonnelID Asc.

我有一个场景需要查询返回 Null,例如:

当 where 子句没有成功满足时,我需要查询在以下列中返回 null

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

但该行的其余部分保持不变。

【问题讨论】:

  • 另一篇文章中的答案是低效的。我对条件聚合有更好的答案,请重新打开。这里的问题也比那里清楚得多
  • 完全同意,这个问题与提到的重复问题不同。
  • 如果您编辑帖子以解释这一点,您可能会重新打开它
  • 已经做了,等待版主采取行动。

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


【解决方案1】:

您可以使用 CTE:

with cte as (
      your query here
     )
select cte.*
from cte
union all
select null, null, null, null, null, null
from (values (1)) v(x)
where not exists (select 1 from cte);

【讨论】:

    猜你喜欢
    • 2021-04-22
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 2020-04-22
    • 2018-08-09
    相关资源
    最近更新 更多