遇到以零作除数错误

WoCao_CSD_N 2012-02-08 08:18:23
原语句是这样的:

sum(case when day(OQCTime)=1 then BadNo else 0 end)/sum(case when day(OQCTime)=1 then floor(TestNo) else 0 end)*1000000 as [1],

提示错误:遇到以零作除数错误



后来改成:

sum(case when day(OQCTime)=1 then BadNo else 0 end)/nullif(sum(case when day(OQCTime)=1 then isnull(floor(TestNo),0) else 0 end)*1000000,0) as [1],

错误提示:将 expression 转换为数据类型 int 时出现算术溢出错误。
...全文
509 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
WoCao_CSD_N 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 szstephenzhou 的回复:]
引用 21 楼 wocao_csd_n 的回复:
引用 20 楼 beirut 的回复:
when day(OQCTime)=2 then BadNo else 0 end)/sum(case when day(OQCTime)=2 then floor(TestNo) else 0 end)*1000000 as [2]
除数不能为0啊 这是小学问题吧
麻烦看清啊 我说了 分母 分子 都……
[/Quote]估计不比你年龄小
sum(case when day(OQCTime)=1 then BadNo else 0 end)
/
nullif(cast(sum(case when day(OQCTime)=1 then isnull(floor(TestNo),0) else 0 end)*1000000 as bigint),0) as [1],
黄_瓜 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 wocao_csd_n 的回复:]

引用 20 楼 beirut 的回复:
when day(OQCTime)=2 then BadNo else 0 end)/sum(case when day(OQCTime)=2 then floor(TestNo) else 0 end)*1000000 as [2]
除数不能为0啊 这是小学问题吧
麻烦看清啊 我说了 分母 分子 都有数据的情况下 无语
[/Quote]



转换一下数据类型用 bigint 或者decimal 试试
勿勿 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 wocao_csd_n 的回复:]
引用 20 楼 beirut 的回复:
when day(OQCTime)=2 then BadNo else 0 end)/sum(case when day(OQCTime)=2 then floor(TestNo) else 0 end)*1000000 as [2]
除数不能为0啊 这是小学问题吧
麻烦看清啊 我说了 分母 分子 都有数据的情况下 无语
[/Quote]

年轻人 低调点

要先转下 bigint
WoCao_CSD_N 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 beirut 的回复:]
when day(OQCTime)=2 then BadNo else 0 end)/sum(case when day(OQCTime)=2 then floor(TestNo) else 0 end)*1000000 as [2]
除数不能为0啊 这是小学问题吧
[/Quote]麻烦看清啊 我说了 分母 分子 都有数据的情况下 无语
黄_瓜 2012-02-08
  • 打赏
  • 举报
回复
when day(OQCTime)=2 then BadNo else 0 end)/sum(case when day(OQCTime)=2 then floor(TestNo) else 0 end)*1000000 as [2]
除数不能为0啊 这是小学问题吧

叶子 2012-02-08
  • 打赏
  • 举报
回复
报错是因为*1000000 超出int上限了。
WoCao_CSD_N 2012-02-08
  • 打赏
  • 举报
回复
刚刚找个有数据的日期测试了下,结果却是0

sum(case when day(OQCTime)=2 then BadNo else 0 end)/sum(case when day(OQCTime)=2 then floor(TestNo) else 0 end)*1000000 as [2]
结果:0
WoCao_CSD_N 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
引用 13 楼 wocao_csd_n 的回复:
引用 12 楼 的回复:
引用 11 楼 wocao_csd_n 的回复:
引用 10 楼 的回复:
引用 5 楼 wocao_csd_n 的回复:
引用 4 楼 的回复:
如果分母为0
那结果怎么处理?
做0处理


引用 9 楼 wocao_csd_n 的回复:
引用 8 楼 的回复:
引用 5 楼 wocao_csd……
[/Quote]恩 这个我知道 但是结果就是不对 刚开始我写的语句和你的差不多 结果不对
紫竹林畔 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wocao_csd_n 的回复:]
引用 12 楼 的回复:
引用 11 楼 wocao_csd_n 的回复:
引用 10 楼 的回复:
引用 5 楼 wocao_csd_n 的回复:
引用 4 楼 的回复:
如果分母为0
那结果怎么处理?
做0处理


引用 9 楼 wocao_csd_n 的回复:
引用 8 楼 的回复:
引用 5 楼 wocao_csd_n 的回复:
引用 4 楼 的回复:
那结果怎……
[/Quote]
--思路是这样的
declare @t table(a int,b dec(18,2))
insert @t select 1,0
insert @t select 2,3
insert @t select 3,0
insert @t select 4,6
select case when b=0 then 0 else a/b end [a/b结果]
from @t
/*
a/b结果
---------------------------------------
0.0000000000000000000
0.6666666666666666666
0.0000000000000000000
0.6666666666666666666

(4 row(s) affected)

*/
xiaoxiangqing 2012-02-08
  • 打赏
  • 举报
回复
除数是不能为0的
WoCao_CSD_N 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wocao_csd_n 的回复:]
引用 12 楼 的回复:
引用 11 楼 wocao_csd_n 的回复:
引用 10 楼 的回复:
引用 5 楼 wocao_csd_n 的回复:
引用 4 楼 的回复:
如果分母为0
那结果怎么处理?
做0处理


引用 9 楼 wocao_csd_n 的回复:
引用 8 楼 的回复:
引用 5 楼 wocao_csd_n 的回复:
引用 4 楼 的回复:
那结果怎……
[/Quote]如果分母为0
结果 也为0 丢了 也为0
WoCao_CSD_N 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
引用 11 楼 wocao_csd_n 的回复:
引用 10 楼 的回复:
引用 5 楼 wocao_csd_n 的回复:
引用 4 楼 的回复:
如果分母为0
那结果怎么处理?
做0处理


引用 9 楼 wocao_csd_n 的回复:
引用 8 楼 的回复:
引用 5 楼 wocao_csd_n 的回复:
引用 4 楼 的回复:
那结果怎么处理?
……
[/Quote]如果分母为0
不为0 你这个也没有计算 看SQL结果截图(第一行分子,第二行分母,第三行你给的SQL)
紫竹林畔 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wocao_csd_n 的回复:]
引用 10 楼 的回复:
引用 5 楼 wocao_csd_n 的回复:
引用 4 楼 的回复:
如果分母为0
那结果怎么处理?
做0处理


引用 9 楼 wocao_csd_n 的回复:
引用 8 楼 的回复:
引用 5 楼 wocao_csd_n 的回复:
引用 4 楼 的回复:
如果分母为0
那结果怎么处理?
做0处理


SQL code
case w……
[/Quote]
分母为0你还做计算了?
那分母为零你当多少处理?
WoCao_CSD_N 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
引用 5 楼 wocao_csd_n 的回复:
引用 4 楼 的回复:
如果分母为0
那结果怎么处理?
做0处理


引用 9 楼 wocao_csd_n 的回复:
引用 8 楼 的回复:
引用 5 楼 wocao_csd_n 的回复:
引用 4 楼 的回复:
如果分母为0
那结果怎么处理?
做0处理


SQL code
case when sum(case w……
[/Quote]这个数据2号分母 分子都是有数据的,结果还是为0
紫竹林畔 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wocao_csd_n 的回复:]
引用 4 楼 的回复:
如果分母为0
那结果怎么处理?
做0处理
[/Quote]
[Quote=引用 9 楼 wocao_csd_n 的回复:]
引用 8 楼 的回复:
引用 5 楼 wocao_csd_n 的回复:
引用 4 楼 的回复:
如果分母为0
那结果怎么处理?
做0处理


SQL code
case when sum(case when day(OQCTime)=1 then floor(TestNo) else 0 end)=0 then 0
……
你好 ,这个语句查出结果也比对 示例数据


S……
[/Quote]
我的是
分母为0时候
就不做除法计算 直接结果为0
WoCao_CSD_N 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 5 楼 wocao_csd_n 的回复:
引用 4 楼 的回复:
如果分母为0
那结果怎么处理?
做0处理


SQL code
case when sum(case when day(OQCTime)=1 then floor(TestNo) else 0 end)=0 then 0
……
[/Quote]你好 ,这个语句查出结果也比对 示例数据


sum(case when day(OQCTime)=1 then BadNo else 0 end)
得到结果是:1


sum(case when day(OQCTime)=1 then floor(TestNo) else 0 end)
得到结果是:9802


1/9802*1000000结果肯定不是0,但是你的语句结果是0
紫竹林畔 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wocao_csd_n 的回复:]
引用 4 楼 的回复:
如果分母为0
那结果怎么处理?
做0处理
[/Quote]
case when sum(case when day(OQCTime)=1 then floor(TestNo) else 0 end)=0 then 0 
else (
sum(case when day(OQCTime)=1 then BadNo else 0 end)
/sum(case when day(OQCTime)=1 then floor(TestNo) else 0 end)*1000000) end as [1],
WoCao_CSD_N 2012-02-08
  • 打赏
  • 举报
回复
最后结果要的是整数 四舍五入
WoCao_CSD_N 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 szstephenzhou 的回复:]
SQL code
sum(case when day(OQCTime)=1 then BadNo else 0 end)
/
nullif(cast(sum(case when day(OQCTime)=1 then isnull(floor(TestNo),0) else 0 end)*1000000 as bigint),0) as [1],
[/Quote]将 expression 转换为数据类型 int 时出现算术溢出错误。
加载更多回复(5)

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧