1

当我尝试通过 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 不能正确查询。

编辑:

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

4

2 回答 2

0

也许你期望得到这样的结果:

  ROUND( 100 * (  Col2   /  ( ABS(Col1) +   ABS(Col2))))
于 2012-08-22T19:30:22.263 回答
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

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

于 2012-08-22T19:45:47.823 回答