ISNULL() 不将 0 值视为 NULL



我有将发票数量乘以手动价格的收入脚本,如果手动价格为空,它将乘以标价,那么如果两者都为空,则值将为 0。

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

我尽可能希望 CASE 语句作为我最后的手段,但如果真的没有更简单的方法,那么我会使用它。

SELECT INVOICE_QUANTITY * ISNULL(MANUAL_PRICE,ISNULL(LIST_PRICE,0)) as Revenue

您可以添加NULLIF以将0值视为NULL值:

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

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

然后不要使用 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

最新更新