我有两张桌子。一个表实际上由日常事件填充,而另一个表只是另一个表的摘要。我有一个存储过程,它删除存储在每日表中的值。现在每次删除后,还应更新Summary表,以便现在更新SUM的值减去已删除的值。
我的问题是当每日表被清空时,然后自动对它进行求和会产生NULL值(因为在其中没有找到任何条目)。然后应用程序崩溃,因为我的摘要表不应包含NULL值。
如果可能,如果SUM结果为NULL,如何创建一个使值为0的过程?
示例查询:
DELETE FROM Daily WHERE DailyID = @DailyID
SELECT @TotalA = SUM(o.OutA), @TotalB = SUM(o.OutB), @TotalC = SUM(o.OutB)
FROM Daily
WHERE Day = @Day
UPDATE Summary
SET MyA = @TotalA, MyB = @TotalB, MyC = @TotalC
WHERE SummaryID = @SummaryID
从我上面给出的查询中,假设我的每日表中共有10个条目。 2是星期三的参赛作品,3是星期五,5是星期六参赛作品。所以基本上,我的汇总表将有三个条目 - 每个星期三,星期六和星期五的摘要。
当我要求我的程序删除所有星期三条目时,将剩下8个条目(没有星期三)。因此,我必须更新我的摘要条目,说明所有周三条目都已删除。但是,我不希望我的汇总表忘记他有一个星期三。所以相反,我希望他保留星期三条目,其总结束值为零(0)。
答案 0 :(得分:1)
您可以使用COALESCE
将NULL
替换为值:
SELECT COALESCE( your_column, 0 )
FROM your_table
它接受一个参数列表,并返回第一个NOT NULL
。
编辑:根据您的示例,您可以执行以下操作:
UPDATE Summary
SET MyA = Coalesce( @TotalA, 0 ),
MyB = Coalesce( @TotalB, 0 ),
MyC = Coalesce( @TotalC, 0 )
WHERE SummaryID = @SummaryID
答案 1 :(得分:1)
这是在SQL服务器上尝试ISNULL(SUM(列),0)。