运行脚本时,SQL中出现“被零除”

时间:2019-05-24 11:14:07

标签: sql sql-server

我正在尝试在要分割的SQL中运行脚本,但是出现错误“遇到的除以零错误”

我尝试添加NULLIF,这在我阅读的旧帖子中有所建议,但这没有帮助。

SELECT SUM([SE Gross]) AS [Donors Gross],
       ROUND((SUM([Cancelled]) * 100) / NULLIF(SUM([SE Gross]), 2), 0),
       SUM([Venue Cost]),
       SUM([Accom/Expenses]),
       ROUND(SUM([SE Gross]) / NULLIF(SUM([fundraising days]), 2), 0) AS Column1,
       ROUND(SUM([Venue Cost]) / NULLIF(SUM([SE Gross]), 2), 0) AS Column2,
       ROUND(SUM([Venue Cost] + [Accom/Expenses]) / NULLIF(SUM([SE Gross]), 2), 0) AS column3,
       ROUND(SUM([Venue Cost] + [Accom/Expenses]) / NULLIF(SUM([donor net COUNT]), 2), 0) AS column4
FROM dbo.TEST1;

我目前得到的结果是:除以零错误。

2 个答案:

答案 0 :(得分:4)

如果您尝试转换为等于2的NULL,请检查以下部分:NULLIF(SUM([SE Gross]), 2),您必须在以下步骤中将2更改为0

SELECT SUM([SE Gross]) AS [Donors Gross],
       ROUND((SUM([Cancelled]) * 100) / NULLIF(SUM([SE Gross]), 0), 0),
       SUM([Venue Cost]),
       SUM([Accom/Expenses]),
       ROUND(SUM([SE Gross]) / NULLIF(SUM([fundraising days]), 0), 0) AS Column1,
       ROUND(SUM([Venue Cost]) / NULLIF(SUM([SE Gross]), 0), 0) AS Column2,
       ROUND(SUM([Venue Cost] + [Accom/Expenses]) / NULLIF(SUM([SE Gross]), 0), 0) AS column3,
       ROUND(SUM([Venue Cost] + [Accom/Expenses]) / NULLIF(SUM([donor net COUNT]), 0), 0) AS column4
FROM dbo.TEST1;

此外,在以下情况下,如果divider = 0,则可以使用CASE语句来避免整个条目为空:

CASE WHEN NULLIF(SUM([SE Gross]), 0) = 0 THEN 1 ELSE NULLIF(SUM([SE Gross]), 0) END

或在以下情况下将ISNULLNULLIF组合在一起:

ISNULL(NULLIF(SUM([SE Gross]), 0), 1)

我的猜测是,您想将小数点后两位取整,因此在这种情况下,它应该像这样:

ROUND((SUM([Cancelled]) * 100) / ISNULL(NULLIF(SUM([SE Gross]), 0), 1), 2)

答案 1 :(得分:0)

只是为了纠正我之前的回答-应该使用CASE:

SELECT SUM([SE Gross]) AS [Donors Gross],
       CASE WHEN SUM([SE Gross]<>0 THEN ROUND((SUM([Cancelled]) * 100) / NULLIF(SUM([SE Gross]), 2), 0) ELSE 0 END,
       SUM([Venue Cost]),
       SUM([Accom/Expenses]),
       CASE WHEN SUM([fundraising days] <> 0 THEN ROUND(SUM([SE Gross]) / NULLIF(SUM([fundraising days]), 2), 0) ELSE 0 END AS Column1,
       CASE WHEN SUM([SE Gross] <> 0 THEN ROUND(SUM([Venue Cost]) / NULLIF(SUM([SE Gross]), 2), 0) ELSE 0 END AS Column2,
       CASE WHEN SUM([SE Gross] <> 0 THEN ROUND(SUM([Venue Cost] + [Accom/Expenses]) / NULLIF(SUM([SE Gross]), 2), 0) ELSE 0 END AS column3,
       CASE WHEN SUM([donor net COUNT] <> 0 THEN ROUND(SUM([Venue Cost] + [Accom/Expenses]) / NULLIF(SUM([donor net COUNT]), 2), 0) ELSE 0 END AS column4
FROM dbo.TEST1;

现在应该可以工作了:)

如果需要,您还可以删除NULLIF(我离开了它们是因为我不知道您是否可能出于其他目的需要它们)