0

次のデータがありますが、クエリでゼロ除算でゼロの問題が発生しました。だから私は2つの形式で以下に示すような出力が欲しいです。

drop table t;

create table t (id number(9), val1 number(9), val2 number(9));
insert into t values (1,23,2);
insert into t values (2,0,4);
insert into t values (3,7,4);
insert into t values (4,0,3);
insert into t values (5,4,6);

tからsqrt(val2 * val1)/val1を選択します。

SQL> /エラー:ORA-01476:除数がゼロに等しい

期待される結果

2つの形式でこのような最初のクエリ

        ID SQRT(VAL2*VAL1)/VAL1
---------- --------------------
         1           .294883912
         2                    0
         3           .755928946
         4                    0
         5           1.22474487

このような2番目のクエリ

       ID SQRT(VAL2*VAL1)/VAL1
---------- --------------------
         1           .294883912
         3           .755928946
         5           1.22474487
4

3 に答える 3

4

使用できます

select sqrt(val2*val1)/val1 from t where val1 != 0;

これにより、val1が0の行が回避されるため、「ゼロ除算」エラーは発生しません。これにより、2番目の形式が得られます。

出力に0を表示する最初の形式では、where句でcaseステートメントを使用できます。

select id, 
case 
    when val1 = 0 then 0
    when val1 != 0 then sqrt(val2*val1)/val1
end
from t 
于 2012-12-09T04:23:54.797 に答える
4

DECODE と NVL の使用を検討してください。DECODE (if/then/else) では、ゼロの有無にかかわらずロジックを指定します。代わりに他の値を使用する場合は、NVL を使用してください。

デコード例:

SELECT DECODE(val1, 0, NULL, sqrt(val2*val1)/val1)  from t;

お役に立てれば。

于 2012-12-09T04:31:09.640 に答える
2

データ挿入into t values (2,0,4);val1は0であるため、これを0で除算することはできません。したがって、最初の天気val1が0であることを確認する必要があるか、それからこれを実行しないでください。

于 2012-12-09T04:21:08.720 に答える