我有一个查询,其中我的总销售额和我取消的销售额减去了,但是如果没有取消销售,则该值为空。
所以基本上如果我的cancelsales为null,则返回减法列的空值而不是totalsales
totalsales-canceledsales(null) = null
1000-null=null
我希望它像这样
1000-null=1000
答案 0 :(得分:6)
正确的ANSI SQL方式(考虑到totalsales
和canceledsales
都可以为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。