1

SQLを使用してパーセンテージ計算を取得しようとすると、異なる結果が得られます。

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

出力

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

2つの負の値を除算すると、29ではなく40になります。クロスチェックするために、このクエリを作成しました。

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

そしてそれは私が29を得る完璧に動作します。

私の質問は:

  1. 負の値を伴うようにクエリを変更するにはどうすればよいですか。
  2. このクエリの何が問題になっていますか、なぜOracleが適切にクエリを実行できないのですか。

編集:

悪いことに、タイプミスをしてこの結論に達しました。この質問を閉じるにはどうすればよいですか?

4

2 に答える 2

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 に答える
0

おそらく、次の結果が期待されます。

  ROUND( 100 * (  Col2   /  ( ABS(Col1) +   ABS(Col2))))
于 2012-08-22T19:30:22.263 に答える