我在尝试运行此语句时遇到问题,并出现错误 ORA-01476:除数等于零。我检查了用于除以的值并放入 case 语句中以检查它是否为零则不继续,但我仍然收到错误。
SELECT ir.contract as Site, ir.purchase_group,
ir.purchase_group_description, ir.current_quarter,
Sum(Nvl(ir.avg_price_paid_by_part_prev_year_q4,0)) test,
Sum(Nvl(ir.avg_price_paid_by_part_q1,0)) test1 , Case When (
Sum(Nvl(ir.avg_price_paid_by_part_prev_year_q4,0)) = 0 or
Sum(Nvl(ir.avg_price_paid_by_part_q1,0)) = 0 ) Then 0 Else
Round(Sum( case when Nvl(ir.avg_price_paid_by_part_prev_year_q4,0)
= 0 then NULL else
case when (100-( ir.avg_price_paid_by_part_q1 / Nvl(ir.avg_price_paid_by_part_prev_year_q4,0) )*100) = 100 then 0 Else
round(((100-( ir.avg_price_paid_by_part_q1 / Nvl(ir.avg_price_paid_by_part_prev_year_q4,0) )*100) *-1),4) end end )
/ Sum(Case When round(((100-( ir.avg_price_paid_by_part_q1 /
Nvl(ir.avg_price_paid_by_part_prev_year_q4,0) )*100) *-1),4) != 0 then
1 Else 0 End ),4)
End avg_price_paid_by_part_q1_change_perc --,
FROM ifsinfo.inflation_report_qr ir where ir.contract = 'NOPG' Group by ir.contract, ir.purchase_group,
ir.purchase_group_description, ir.current_quarter
任何人都可以帮忙吗? 预先感谢。
该查询中有 4 个除法运算。
您明确表示:如果列值不存在(即它是
NULL
,请将其替换为零0
),例如
/ NVL (ir.avg_price_paid_by_part_prev_year_q4, 0)
-------------------------------------- -
if this is NULL, then divide by ...... zero
你真的想这么做吗?如果没有,您期望结果是什么?
也许您会很高兴除以一个非常大的数并得到接近于零的结果。这就是你现在拥有的:
SQL> select 125 / nvl(&par_number, 0) result from dual;
Enter value for par_number: null
select 125 / nvl(null, 0) result from dual
*
ERROR at line 1:
ORA-01476: divisor is equal to zero
这是一个非常小的数字:
SQL> select 125 / nvl(&par_number, 1E99) result from dual;
Enter value for par_number: null
RESULT
----------
1,2500E-97
SQL>
或者,也许你根本不想得到任何结果;在这种情况下,请删除所有
NVL
:
SQL> select 125 / &par_number result from dual;
Enter value for par_number: null
RESULT
----------
<-- this is a NULL
基本上,这取决于您想要得到什么。只是不要除以零,这是不允许的。