排除两个 SUM 的错误
Troubleshooting Errors with Two SUMs
我有一个 table,它将用于供应商记分卡,有 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 keyword not found where expected" 错误,我不确定为什么。
所以,这很愚蠢,但问题最终是这样的:
+nvl(cf$_turn_times,0))
/
sum(
当我将代码更改为这个时 - 实际上我只是在闲逛 - 它起作用了:
+nvl(cf$_turn_times,0))/sum(
所以,关于将 / 和 SUM 与查询的其余部分分开的一些事情——我这样做只是为了让代码对我来说更具可读性——导致了这个问题。
谢谢胡安!
我有一个 table,它将用于供应商记分卡,有 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 keyword not found where expected" 错误,我不确定为什么。
所以,这很愚蠢,但问题最终是这样的:
+nvl(cf$_turn_times,0))
/
sum(
当我将代码更改为这个时 - 实际上我只是在闲逛 - 它起作用了:
+nvl(cf$_turn_times,0))/sum(
所以,关于将 / 和 SUM 与查询的其余部分分开的一些事情——我这样做只是为了让代码对我来说更具可读性——导致了这个问题。 谢谢胡安!