使用两个SUM对错误进行故障排除

时间:2019-02-11 19:19:21

标签: sql oracle aggregate-functions erp

enter image description here

我有一张表,它将用于供应商记分卡,其中有11个不同的字段,可为其分配值1-5。允许为空值。

我需要编写一个查询,该查询将计算每行填写的字段的平均值。换句话说,我可能在一行中将TOTAL除以11,而在另一行中将TOTAL除以5。

我正在使用此查询:

select 
cf$_vendor_no, 
cf$_party,  
cf$_environmental, 
cf$_inspections, 
cf$_invoice_process, 
cf$_ncr, 
cf$_on_time_delivery, 
cf$_qms, 
cf$_safety, 
cf$_schedule, 
cf$_scope_of_work, 
cf$_turn_times,
sum(nvl(cf$_environmental,0)
+nvl(cf$_inspections,0)
+nvl(cf$_invoice_process,0)
+nvl(cf$_ncr,0)
+nvl(cf$_on_time_delivery,0)
+nvl(cf$_qms,0)
+nvl(cf$_safety,0)
+nvl(cf$_schedule,0)
+nvl(cf$_scope_of_work,0)
+nvl(cf$_turn_times,0)) 
/
sum(
case when cf$_environmental is not null then 1 else 0 end +
case when cf$_inspections is not null then 1 else 0 end +
case when cf$_invoice_process is not null then 1 else 0 end +
case when cf$_ncr is not null then 1 else 0 end +
case when cf$_on_time_delivery is not null then 1 else 0 end +
case when cf$_qms is not null then 1 else 0 end +
case when cf$_safety is not null then 1 else 0 end +
case when cf$_schedule is not null then 1 else 0 end +
case when cf$_scope_of_work is not null then 1 else 0 end +
case when cf$_turn_times is not null then 1 else 0 end) --as "average"
from supplier_scorecard_clv  
group by cf$_vendor_no, cf$_party, cf$_environmental, cf$_inspections, cf$_invoice_process, cf$_ncr, cf$_on_time_delivery, cf$_qms, cf$_safety, cf$_schedule, cf$_scope_of_work, cf$_turn_times

而且,它几乎可以正常工作。

代码中的第一个SUM将在每一行中添加值,以得出总计。 FARW002的第一行总计25,第二行6,第三行12。

代码中的第二个SUM也可以正常工作。我的第一个FARW002行得到6计数,第二行得到2计数,第三行得到3计数。

但是,当我尝试将它们组合在一起时,如上面的代码片段中所示,我收到“ ORA-00923:FROM关键字未在预期的位置”错误,并且我不确定为什么。

1 个答案:

答案 0 :(得分:0)

所以,这很愚蠢,但这就是问题的根源所在。

 +nvl(cf$_turn_times,0))  
/ 
sum( 

当我将代码更改为此时-实际上我只是在开玩笑-它起作用了:

+nvl(cf$_turn_times,0))/sum(

因此,有关将/和SUM与查询的其余部分分开的问题-我只是为了使代码对我而言更具可读性-引起了问题。 感谢胡安!