您好,有人可以说我如何在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 */
预先感谢
答案 0 :(得分:0)
如果要避免被零除,同时还要处理NULL
,则可以尝试以下逻辑:
CASE WHEN COALESCE(GROSS_SF, 0) = 0
THEN 0
ELSE GROSS_SALES / GROSS_SF END AS output
需要清楚的是,如果GROSS_SF
为零或NULL
,上述逻辑将返回零值。
答案 1 :(得分:0)
我认为您正在寻找的是IFNULL,请看这里https://www.w3schools.com/sql/sql_isnull.asp
答案 2 :(得分:0)
您很近。您可以这样做:
(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)
这有点短,几乎与您的版本等效(如果0
为"GROSS_SALES"
,则返回NULL
,而您的版本则不是)。
答案 3 :(得分: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;