2010-12-08 60 views
1

我有一個查詢,它將我的總銷售額和我的銷售額減去,但如果沒有取消銷售額,則該值爲空。那麼當sql查詢扣除

所以基本上,如果我的canceledsales其中null它返回減法列,而不是totalsales空值

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

我希望它是這樣

1000-null=1000 

回答

6

正確ANSI SQL的方式是(考慮到totalsalescanceledsales都可以爲空):

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

您還可以看到SQL Server上使用ISNULL的:

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

所以我在查詢生成器中的實際表達式是SUM(APRICE) - isnull(SUM(CancelRevenue),0) – MyHeadHurts 2010-12-08 17:25:53

0

的問題是,對NULL任何函數爲NULL。在這種情況下,NULL意味着未知。

如果您從未知數中減去一個數字,結果是未知的。

如果您從已知數中減去未知數,則結果是未知的。

爲了返回已知答案,必須知道兩個數字。在這種情況下,如果其中一個操作數爲NULL,則NULL是正確的答案。

但是,如果你寧願看到比0 NULL,然後使用ISNULL():

totalsales - isnull(canceledsales, 0) 

本書SQL AntiPatterns有一整章解釋更好NULL。