sql-server - 如何防止sql语句被零除错误

标签 sql-server tsql sql-server-2012

我正在创建一些报告,这些报告采用有限总数(假设为 2,500)的产品(在本例中假设为冰淇淋甜筒),并计算其中有多少在上菜前被打破。

现在我已经记下了 splinter 锥体的实际计数代码。

SELECT COUNT(broken_cones) FROM [ice].[ice_cream_inventory] 
WHERE broken_cones = 'Yes'

但是,我还需要这个总数中 splinter 锥体的百分比。我一直在摆弄代码,但我一直遇到下面这段代码的“除以零”错误。

SELECT CAST(NULLIF((.01 * 2500)/Count(broken_cones), 0) AS 
decimal(7,4)) FROM [ice].[ice_cream_inventory] WHERE broken_cones = 'Yes'

目前,没有任何 splinter 的锥体(并且一段时间内不会),因此现在的总数为零。如何将 NULL 情况显示为零?

我试图在混合中放置一个 ISNULL 语句,但我不断收到“除以零”错误。我这样做对吗?

::编辑::

这就是我最终得到的结果。

SELECT 
CASE
WHEN COUNT(broken_cones) = 0 then 0
ELSE CAST(NULLIF((.01 * 2500)/Count(broken_cones), 0) AS decimal(7,4))
END
FROM [ice].[ice_cream_inventory] WHERE broken_cones = 'Yes'

最佳答案

使用 case 语句。

SELECT 
CASE WHEN COUNT(broken_cones) = 0 then 0
ELSE CAST(NULLIF((.01 * 2500)/Count(broken_cones), 0) AS decimal(7,4)) END
FROM [ice].[ice_cream_inventory] WHERE broken_cones = 'Yes'

关于sql-server - 如何防止sql语句被零除错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23230041/

相关文章:

c# - C#从数据库读取数据时出错

c# - SqlDataReader 和网络延迟

sql - 如何插入到为每一列指定默认值的表中?

visual-studio-2012 - SQL Server 生成的代码被 Visual Studio 声称是错误的?

sql-server-2012 - 更改 SQL Server 2014 中现有十进制列的精度会导致错误

sql-server - 尝试通过 Crystal Reports 连接到 SQL Server

sql - 如何修复 sql server 2005 中的用户定义函数标量值性能问题?

sql - 获取第 n 个连续组的第一行/最后一行

sql-server - SSIS 2012 日期格式 dmy 与 mdy

sql - 将数据从 MS SQL 导入 MySQL