ISNULL()不将0值视为NULL

时间:2016-06-06 11:54:39

标签: sql sql-server

我的收入脚本将发票数量乘以手动价格,如果手工价格为空,它将乘以列表价格,如果两者都为空,则该值为0。

但我的问题是手动价格上有0个值因此,因为它是优先级字段,所以我得到0收入不应该是因为列表价格不是0。

我尽可能地将CASE声明作为我的最后手段,但如果真的没有更简单的方法,那么我将使用它。

Male

2 个答案:

答案 0 :(得分:4)

然后不要使用ISNULL()。使用适当的逻辑:

SELECT (INVOICE_QUANTITY *
        (CASE WHEN MANUAL_PRICE <> 0 THEN MANUAL_PRICE
              WHEN LIST_PRICE IS NOT NULL THEN LIST_PRICE
              ELSE 0
         END)
       ) as Revenue

答案 1 :(得分:4)

您可以添加NULLIF来处理0值,例如NULL值:

SELECT INVOICE_QUANTITY * COALESCE(NULLIF(MANUAL_PRICE, 0), LIST_PRICE, 0) as Revenue

我还将双ISNULL函数更改为单个COALESCE函数。