还请各位帮忙看下这个问题要如何解决。
表单内容如下图:
需求:
依据数据计算出p1~p3每个厂房的权限值,最终依据权限值进行降序排序。
解析:
1.每个厂(PLANT)都有三个数据类别(DATA_TYPE):OUTPUT,WFF,DID,它们都有ACT和GOAL两个数据值;
2.关于权限值的计算以p1为例(其他厂区比例一致),p1的权限值 = OUTPUT数据类别的(ACT/GOAL)*0.5的值 + WFF数据类别的(ACT/GOAL)*0.25的值 + DID数据类别的(ACT/GOAL)*0.25的值;
3.ACT和GOAL两个值存在为0的情况。
原始数据和增加p4 存在act/goal为0的记录:
select c.*
from
(select b.plant,sum(b.weight) sum_weight
from
( select
a.plant,a.data_type, case a.data_type
when 'OUTPUT' then (act/goal)*0.5
when 'WFF' then (act/goal)*0.25
when 'DID' then (act/goal)*0.25
end weight
from
(select plant,data_type,act,goal from COMPANY_PLANT where goal <>0) a
) b
group by b.plant
) c
order by c.sum_weight desc;
SELECT * FROM csdn_test.COMPANY_PLANT;
SELECT
*
FROM
(SELECT
PLANT,
SUM(CASE
WHEN
data_type = 'OUTPUT'
THEN
(CASE
WHEN goal = 0 THEN 0
ELSE act / goal * 0.5
END)
ELSE (CASE
WHEN goal = 0 THEN 0
ELSE act / goal * 0.25
END)
END) AS weight
FROM
COMPANY_PLANT
GROUP BY PLANT) as temp
ORDER BY weight desc