0

これには少し問題があります。値が NULL や 0 であるかどうかに関係なく、実際の結果が得られる式が必要です。以下を参照してください。

SELECT
[...columns...],
(NVL(SUM(table1.qty_rtnd), 0) + NVL(SUM(table1.qty_defective), 0)) / CASE (NVL(table1.sales, 0)) WHEN 0 THEN 1 END AS six_wk_pct_defective,
[...more columns...]

この特定のインスタンスの値:

 table1.qty_rtnd = NULL
 table1.qty_defective = 7
 table1.sales = 560

この式に CASE ステートメントが含まれておらず、除数が 0 の場合、Oracle SQL Developer は、ゼロで除算できないことを示すエラーを返します。それは問題ありませんが、この数式の被除数部分に CASE ステートメントを適用しようとすると、クエリ結果のフィールドが NULL になってはならないのに NULL になります (この特定のケースでは、数学では 0.0125 になるはずです)。 .

私は何を間違っていますか?CASE、NVL、DECODE、またはその他の関数を使用してこの問題を解決するにはどうすればよいですか?

ありがとう、

-蟻

アップデート:

答えを探している人のために。1つは次の人物から提供されました。

SELECT (NVL (qty_rtnd, 0) + NVL (qty_defective, 0)) / NVL (NULLIF (sales, 0), 1) FROM table1
4

2 に答える 2

1

どうですか

SELECT (NVL (qty_rtnd, 0) + NVL (qty_defective, 0)) / NVL (sales, 1) FROM table1

また

SELECT (NVL (qty_rtnd, 0) + NVL (qty_defective, 0)) / NVL (NULLIF (sales, 0), 1) FROM table1

売上を守る=0

于 2014-06-10T21:32:32.823 に答える
0

テストケースを提供していないため、ここで何を求めているのか理解するのはかなり困難です. たとえば、さまざまな列の値を教えてくれませんでした。どうやら望ましい結果は 0.0125 だとおっしゃいましたが、どの入力を使用すればよいか分からず、少し盲目です。

唯一の問題が分母である場合、分母を

CASE WHEN NVL( table1.sales, 0 ) = 0
     THEN 1
     ELSE table1.sales
 END

その推測が正しくない場合は、再現可能なテスト ケースを投稿してください。

于 2014-06-10T21:27:29.177 に答える