【发布时间】:2018-02-23 23:07:22
【问题描述】:
我有一个这样的查询,O_ID 数据类型是 VARCHAR,f_units 数据类型是 Number
我在下面做了以避免除数为零错误,当我这样做时,当我在语句中添加整个案例的总和时,我仍然收到错误 ORA-01476: divisor is equal to zero说功能太封闭了。
select O_ID,SUM(F_UNITS),
CASE WHEN SUM(F_UNITS) <> 0 THEN sum(cast(f_units as float)) / sum(cast(sum(f_units ) as float)) over (partition by O_ID) ELSE 0 END
from myfacttable
在这种情况下如何处理除数 0 错误?
【问题讨论】:
-
你想做什么?在这里将较大的数字除以较小的数字似乎没有意义。例如。你得到了总和除以分区上的总和除以
o_id。我想你想要反过来? -
我正在尝试做一个市场份额计算公式是O_ID的Total F_units / Total F_units,其中我的O_ID是我的出口,它就像每个出口的市场份额..,
-
请编辑您问题中的 SELECT 语句,使其有效。您有一个未终止的
CASE表达式 -CASE没有END。谢谢。 -
另外你不能选择
o_id和sum(f_units)而不按o_id分组。但是添加它会改变您在sum(cast(f_units as float)) / sum(etc)表达式中尝试执行的任何操作的逻辑。一些测试数据会有很大帮助。 -
标准模式是将除数表达式包装在
nullif(yourdivisor,0)中,这将返回无法计算值的空值。我会把它作为答案发布,但我不知道查询的目的是什么。
标签: oracle