簡體   English   中英

case語句如何使用null

[英]how to use is null with case statements

嗨,有人問我如何在SQL Server Management Studio中為語句寫查詢=> if(isnull("GROSS_SF")=1 or "GROSS_SF"=0,0,"GROSS_SALES"/"GROSS_SF")通過使用case語句:

  CASE 
 WHEN ("GROSS_SF"=1 or "GROSS_SF"=0) isnull   then 0
  else "GROSS_SALES"/"GROSS_SF"
  end/* i am getting error if i write it like this */

提前致謝

如果要避免被零除,同時還要處理NULL ,則可以嘗試以下邏輯:

CASE WHEN COALESCE(GROSS_SF, 0) = 0
     THEN 0
     ELSE GROSS_SALES / GROSS_SF END AS output

需要明確的是,如果GROSS_SF為零或NULL ,則上述邏輯將返回零值。

我認為您正在尋找的是IFNULL,請看這里https://www.w3schools.com/sql/sql_isnull.asp

你近了 你可以做:

(CASE WHEN "GROSS_SF" IS NULL OR "GROSS_SF" = 0 THEN 0
      ELSE "GROSS_SALES" / "GROSS_SF"
 END)

在SQL中,通常使用NULLIF()避免除以零錯誤:

"GROSS_SALES" / NULLIF("GROSS_SF", 0)

但是,這將返回NULL而不是0 如果您真的想要零:

COALESCE("GROSS_SALES" / NULLIF("GROSS_SF", 0), 0)

這寫起來有點短,幾乎與您的版本等效(如果"GROSS_SALES"NULL ,則返回0 ,而您的版本則不是)。

您可以使用NULLIF()來防止算術divide by zero errors

select . . . , 
      GROSS_SALES / nullif(GROSS_SF, 0)
from table t;

但是,這將返回null而不是錯誤,如果您想顯示0則需要使用isnull() (MS SQL特定)或coalesce() (SQL標准)。

因此,您可以表達它:

select . . . , 
       isnull(GROSS_SALES / nullif(GROSS_SF, 0), 0)
from table t;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM