遇到以零作除数错误

ysycysyc 2018-07-27 10:41:59
各位大虾,前几天求助的一个贴子以为解决问题了,但现在发现还是不对,就是提示“遇到以零作除数错误。”的问题。

执行下面的语句提示“遇到以零作除数错误。”
SELECT
(
cast((y.a+y.b+y.c+y.d+y.e+y.f)/z.a*1.000000 as decimal(18,10))+
cast((y.a+y.b+y.c+y.d+y.e+y.f)/z.b*1.000000 as decimal(18,10))
)
/
(
cast((y.a+y.b+y.c+y.d+y.e+y.f)/z.e*1.000000 as decimal(18,10))+
cast((y.a+y.b+y.c+y.d+y.e+y.f)/z.f*1.000000 as decimal(18,10))
)

FROM TMY y , TMZ z

现在肯定的是,TMY全都大于0.5,TMZ没有小于10的数,但是用下面的命令验证,返回的结果却有部分为0

SELECT
(
cast((y.a+y.b+y.c+y.d+y.e+y.f)/z.e*1.000000 as decimal(18,10))+
cast((y.a+y.b+y.c+y.d+y.e+y.f)/z.f*1.000000 as decimal(18,10))
) M
FROM TMY y , TMZ z ORDER BY M asc

并且单个验证这两条都会返回少数0值,郁闷,请大虾们指教。


...全文
559 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ysycysyc 2018-07-31
  • 打赏
  • 举报
回复
吉普赛的歌 2018-07-31
  • 打赏
  • 举报
回复
引用 5 楼 ysycysyc 的回复:
谢谢版主


没事就结贴吧
ysycysyc 2018-07-30
  • 打赏
  • 举报
回复
谢谢版主
ysycysyc 2018-07-30
  • 打赏
  • 举报
回复
引用 2 楼 yenange 的回复:
SELECT 
(
cast((y.a+y.b+y.c+y.d+y.e+y.f)/(z.a*1.000000) as decimal(18,10))+
cast((y.a+y.b+y.c+y.d+y.e+y.f)/(z.b*1.000000) as decimal(18,10))
)
/
(
cast((y.a+y.b+y.c+y.d+y.e+y.f)/(z.e*1.000000) as decimal(18,10))+
cast((y.a+y.b+y.c+y.d+y.e+y.f)/(z.f*1.000000) as decimal(18,10))
)
FROM TMY y, TMZ z


* 1.000000 这里加上括号, 要不白*了。 上面的试下


谢谢版主,问题就是出在这里,郁闷了好几天
吉普赛的歌 2018-07-30
  • 打赏
  • 举报
回复
另外, 你的算式可以简化:
y. a+b+c+d+e/z.a
+
y. a+b+c+d+e/z.b
-----------------------
y. a+b+c+d+e/z.e
+
y. a+b+c+d+e/z.f
=>
设 y.a+y.b+y.c+y.d+y.e = K , 则:
K/z.a + K/z.b
-------------
K/z.e + K/z.f
=>
1/z.a + 1/z.b
--------------
1/z.e + 1/z.f
=>
z.e*z.f ( z.b + z.a )
----------------------
z.a*z.b( z.f + z.e )


直接用这个就好:
SELECT 
CAST( (z.e * z.f * ( z.a + z.b )) AS DECIMAL(18,5) )
/
CAST( (z.a * z.b * ( z.e + z.f )) AS DECIMAL(18,5) )
FROM TMZ z
吉普赛的歌 2018-07-30
  • 打赏
  • 举报
回复
SELECT 
(
cast((y.a+y.b+y.c+y.d+y.e+y.f)/(z.a*1.000000) as decimal(18,10))+
cast((y.a+y.b+y.c+y.d+y.e+y.f)/(z.b*1.000000) as decimal(18,10))
)
/
(
cast((y.a+y.b+y.c+y.d+y.e+y.f)/(z.e*1.000000) as decimal(18,10))+
cast((y.a+y.b+y.c+y.d+y.e+y.f)/(z.f*1.000000) as decimal(18,10))
)
FROM TMY y, TMZ z


* 1.000000 这里加上括号, 要不白*了。 上面的试下
BlueStorm 2018-07-30
  • 打赏
  • 举报
回复
你运行一下下面的语句,看看是什么东西导致为0的就知道什么原因了:
SELECT y.a, y.b, y.c, y.d, y.e, y.f, (y.a+y.b+y.c+y.d+y.e+y.f) AS y, z.e AS ze, z.f AS zf
FROM TMY y, TMZ z
WHERE (CAST((y.a+y.b+y.c+y.d+y.e+y.f)/z.e*1.000000 AS DECIMAL(18,10))+
CAST((y.a+y.b+y.c+y.d+y.e+y.f)/z.f*1.000000 AS DECIMAL(18,10))) = 0

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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