SQL在列中划分两个负值

时间:2012-08-22 18:12:42

标签: sql oracle

当我尝试通过sql获得百分比计算时,我得到了不同的结果。

 ROUND( 100 * (  Col2   /  ( Col1 +   Col2)))

输出

col1     col2      colR
-----    -----     ------
150       51       34
-400.11  -160.04   40

当它除以两个负值时,它给出的是40而不是29.要交叉检查,我写了这个查询

   select round( 100* ( -160.04/-560.15 ) ) from dual;

它完美无缺,我得到了29。

我的问题是:

  1. 我应该如何修改我的查询以配合负值。
  2. 这个查询有什么不对,为什么oracle能够正确查询。
  3. 编辑:

    我的不好,我犯了一个拼写错误并得出了这个结论。我该如何关闭这个问题?

2 个答案:

答案 0 :(得分:0)

也许你期望这个结果:

  ROUND( 100 * (  Col2   /  ( ABS(Col1) +   ABS(Col2))))

答案 1 :(得分:0)

根据@ HLGEM上面的评论...

在SQL Server中,给出以下内容:

create table #foo
(
  c1      float not null ,
  c2      float not null ,
  c1c2sum as c1 + c2     ,
  cR      as round( 100.0 * c2 / (c1+c2) , 0 ) ,
  cX      as round( 100.0 * c2 /  c1     , 0 ) ,
)

insert #foo (c1,c2) values( 150     , 51      )
insert #foo (c1,c2) values( -400.11 , -160.04 )

执行:

select * from #foo

产生以下结果集:

c1      c2      c1c2sum cR cX
------- ------  ------- -- --
150     51      201     25 34
-400.11 -160.04 -560.15 29 40

我怀疑你有一个括号问题,可以这么说。