我对此有点麻烦。我需要一个公式,无论这些值是否为 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 或任何其他功能来解决此问题?
谢谢,
-蚂蚁
更新:
对于那些寻找答案的人。一个是由以下人员提供的;
SELECT (NVL (qty_rtnd, 0) + NVL (qty_defective, 0)) / NVL (NULLIF (sales, 0), 1) FROM table1