[英]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.