我有一個查詢,它將我的總銷售額和我的銷售額減去,但如果沒有取消銷售額,則該值爲空。那麼當sql查詢扣除
所以基本上,如果我的canceledsales其中null它返回減法列,而不是totalsales空值
totalsales-canceledsales(null) = null
1000-null=null
我希望它是這樣
1000-null=1000
我有一個查詢,它將我的總銷售額和我的銷售額減去,但如果沒有取消銷售額,則該值爲空。那麼當sql查詢扣除
所以基本上,如果我的canceledsales其中null它返回減法列,而不是totalsales空值
totalsales-canceledsales(null) = null
1000-null=null
我希望它是這樣
1000-null=1000
正確ANSI SQL的方式是(考慮到totalsales
和canceledsales
都可以爲空):
coalesce(totalsales, 0) - coalesce(canceledsales, 0)
您還可以看到SQL Server上使用ISNULL的:
isnull(totalsales, 0) - isnull(canceledsales, 0)
的問題是,對NULL任何函數爲NULL。在這種情況下,NULL意味着未知。
如果您從未知數中減去一個數字,結果是未知的。
如果您從已知數中減去未知數,則結果是未知的。
爲了返回已知答案,必須知道兩個數字。在這種情況下,如果其中一個操作數爲NULL,則NULL是正確的答案。
但是,如果你寧願看到比0 NULL,然後使用ISNULL():
totalsales - isnull(canceledsales, 0)
本書SQL AntiPatterns有一整章解釋更好NULL。
所以我在查詢生成器中的實際表達式是SUM(APRICE) - isnull(SUM(CancelRevenue),0) – MyHeadHurts 2010-12-08 17:25:53