【发布时间】:2019-05-24 11:14:07
【问题描述】:
我正在尝试在 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;
我目前得到的结果是:遇到除以零错误。
【问题讨论】:
-
我想你可能想要的是 ISNULL,而不是 NULLIF。您是否真的去阅读documentation 以了解该功能的作用?不要在不了解其基本思想的情况下盲目地从互联网上复制代码。由于现在搜索引擎如此强大,文档和示例如此丰富,通常没有理由不做至少一点简单的研究,只需几秒钟
-
存在除法错误,因此(作为调试步骤)将该除法的两个组件拆分为单独的列并检查 0
-
附言。如果您的字段中的数据实际上只是 0,那么 ISNULL 也不会帮助您......也许 CASE 语句可能会更好。您没有向我们展示任何示例数据,因此我们无法准确确定发生了什么情况
-
看起来您系统地将参数交换为
ROUND和NULLIF。您当前正在使用NULLIF(SUM([SE Gross]), 2),如果SUM([SE Gross])正好等于2,这会将结果转换为NULL。您想要NULLIF(SUM([SE Gross]), 0)(大概是四舍五入)。 -
@ADyson 我确定操作不想使用
isnull。你明白nullif应该在这里实现什么吗?没有必要如此咄咄逼人地告诫 op(尤其是当你显然不明白他们想要达到的目标时)。
标签: sql sql-server