sql查询减法

时间:2010-12-08 17:21:48

标签: sql sql-server-2005

我有一个查询,其中我的总销售额和我取消的销售额减去了,但是如果没有取消销售,则该值为空。

所以基本上如果我的cancelsales为null,则返回减法列的空值而不是totalsales

totalsales-canceledsales(null) = null
1000-null=null

我希望它像这样

1000-null=1000

2 个答案:

答案 0 :(得分:6)

正确的ANSI SQL方式(考虑到totalsalescanceledsales都可以为null):

coalesce(totalsales, 0) - coalesce(canceledsales, 0)

您可能还会在SQL Server上看到使用ISNULL:

isnull(totalsales, 0) - isnull(canceledsales, 0)

答案 1 :(得分:0)

问题是任何针对NULL的函数都是NULL。在这种情况下,NULL表示未知。

如果从未知数字中减去数字,则结果未知。

如果从已知数字中减去未知数字,则结果未知。

必须知道这两个数字才能返回已知答案。在这种情况下,如果其中一个操作数为NULL,则NULL为正确答案。

但是,如果您更愿意看到0而不是NULL,那么请使用ISNULL():

totalsales - isnull(canceledsales, 0)

本书SQL AntiPatterns有一整章更好地解释了NULL。