gpt4 book ai didi

sql - 更改聚合函数以在元素为 NULL 时输出 NULL

转载 作者:行者123 更新时间:2023-12-02 07:00:18 26 4
gpt4 key购买 nike

我搜索的关于警告的每个问题

Warning: Null value is eliminated by an aggregate or other SET operation.

通常人们希望将 NULL 值视为 0。我想要相反的情况,如何修改以下存储过程以使其返回 NULL 而不是 1?

CREATE PROCEDURE TestProcedure 
AS
BEGIN
select cast(null as int) as foo into #tmp

insert into #tmp values (1)

select sum(foo) from #tmp
END
GO

我认为它会是 SET ANSI_NULLS ON(我在声明之前、在过程本身中以及在我的测试查询中执行该过程之前尝试过)但这似乎并没有改变求和(

最佳答案

sum() 函数自动忽略 NULL。要做你想做的事,你需要一个明确的检查:

select (case when count(foo) = count(*) then sum(foo) end)
from #tmp;

如果你想要明确,你可以添加 else NULLcase 语句。

这背后的逻辑是count(foo) 计算foo 中非NULL 值的数量。如果这等于所有行,则所有值都是非 NULL。你可以使用更详细的:

select (case when sum(case when foo is null then 1 else 0 end) > 0
then sum(foo)
end)

而且,我想指出标题具有误导性。 1 + NULL = NULL。问题在于聚合函数,而不是算术运算符。

关于sql - 更改聚合函数以在元素为 NULL 时输出 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22158154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com