SQL 服务器遇到除零错误 COALESCE()

SQL Server Divide by zero error encountered COALESCE()

我有以下语句,即使在使用合并表达式时仍然返回被零除错误。

COALESCE(CAST(sum(case when W0.i13 = 1 then 1 else 0 end)AS FLOAT) / CAST(sum(case when W0.i13 <> 0 then 1 else 0 end) AS FLOAT),0)

Msg 8134, Level 16, State 1, Line 1 Divide by zero error encountered.

我也试了下面的,还是报错

COALESCE(CAST(sum(case when W0.i13 = 1 then 1 else 0 end)AS FLOAT),0) / COALESCE(CAST(sum(case when W0.i13 <> 0 then 1 else 0 end) AS FLOAT),0)

在合并函数 0/0 中将 0 替换为 1 将得到 error:Divide 遇到的零错误。

在 "case when W0.i13 = 1 then 1 else 0 end)AS FLOAT" 语句中,当其输出为 0 时,它不会在合并中使用第二个参数,因此最好将 ) 替换为其他函数。到那时它会给出错误。最好放其他号码

它会起作用

更改为

 COALESCE(CAST(sum(case when W0.i13 = 1 then 1 else 2 end)AS FLOAT),1) / COALESCE(CAST(sum(case when     W0.i13 <> 0 then 1 else 2 end) AS FLOAT),1)

当太阳归零时。它将除以零。 试试这个...

COALESCE(CAST(sum(case when W0.i13 = 1 then 1 else 0 end)AS FLOAT),1) / COALESCE(CAST((case when sum(case when W0.i13 <> 0 then 1 else 0 end) = 0 then 1 else sum(case when W0.i13 <> 0 then 1 else 0 end) end) AS FLOAT),1)

正如 CoderOfCode 在评论中指出的那样 - 您使用 0 作为 COALESCE 的第二个参数而不是 1。但是您真正的问题是除数中的 SUM 给出 0,并且 COALESCE 会很乐意使用那(因为 0 != NULL)。

您应该能够在除数部分使用 COALESCE / NULL 的组合来强制 COALESCE 使用其第二个参数,从而避免除以 0:

  CAST(
    sum(
      case 
        when W0.i13 = 1 then 1 
        else 0 
      end)
  AS FLOAT) / 
  COALESCE(
    CAST(
      sum(
        case 
          when W0.i13 <> 0 then 1 
          else NULL end) 
    AS FLOAT),
    1)

SQL Fiddle

请尝试以下

COALESCE(CAST(sum(case when W0.i13 = 1 then 1 else 0 end)AS FLOAT) /  CAST(sum(case when W0.i13 <> 0 then W0.i13 else 1 end) AS FLOAT),0)

这里可能的罪魁祸首是 CAST(sum(case when W0.i13 <> 0 then 1 else 0 end) AS FLOAT) 因为

如果 W0.i13 <> 0 成立则它 returns 0