我在oracle 10g下创建了一个SQL查询,结果应该是这样的:
----------------------------------------------------------------------------------
TEXT VALUE1 VALUE2 VALUE3 VALUE4
---------------------------------------------------------------------------------
TEXT1 8795 5684 value1-value2 value3/value2*100
TEXT2 235 568 ... ...
TEXT3 125 23 ... ...
TEXT4 789 58 ... ...
TEXTN 0 0 ... ...当我试图计算VALUE4列时,会得到以下错误:
ORA-01476: le diviseur est égal à zéro
01476. 00000 - "divisor is equal to zero"
*Cause:
*Action:我尝试了DECODE函数,但是我仍然有相同的错误,这对于CASE来说是一样的
注: VALUE1、VALUE2、VALUE3和VALUE4为计算列;VALUE1 = sum(col1)+sum(col2).对于其他VALUE2列也是如此。
感谢并致以问候
发布于 2013-06-10 11:32:05
这完全取决于是否要计算一个值,如果它会导致无限值的话。您可以忽略这些特定实例,并按照戈登的回答的建议计算其余的实例:
case when value2 <> 0 then value3 / value2 * 100 end或者,如果想忽略它们,可以使用NULLIF()将值更改为NULL,而不计算任何内容:
value3 / nullif(value2, 0) * 100我不理解你的论点,这是一个经过计算的列引起一个问题。如果它是一个虚拟列,那么您的表就永远不会创建,正如在文献资料中指定的那样,虚拟列不能按名称引用其他列。
如果它不是虚拟列,那么您可以在select语句中如常地这样做。
发布于 2013-06-10 11:22:17
在您的代码中,您有:
select value3/value2*100 as value4你应该:
select (case when value2 <> 0 then value3/value2*100 end) as value4鉴于你的问题:
select value1, value2, value3,
(case when value2 is not null then value3 / value2 * 100 end) as value4
from (select value1, value2, (value1 - value2) as value3
from . . .
)https://stackoverflow.com/questions/17022674
复制相似问题