case语句如何使用null

时间:2018-08-07 11:21:41

标签: sql sql-server ssms

您好,有人可以说我如何在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 */

预先感谢

4 个答案:

答案 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;