update param_data f,
(
SELECT
c.*,
CASE
WHEN WeightedFailure IS NOT NULL
AND WeightedFailure > 0 THEN
1 / WeightedFailure ELSE 0
END AS basic_mtbf_regulate,
CASE
WHEN WeightedFailure IS NOT NULL
AND WeightedFailure > 0 THEN
WeightedMTTR / WeightedFailure ELSE 0
END AS repair_mttcr
FROM
(
SELECT
c.id,
c.name,
sum(
CASE
WHEN b.product_type < 5 THEN
1 * 1 / basic_mtbf_regulate
WHEN a.reliab_distrib_type = 1 THEN
1 * a.basic_mtbf_operating_ratio / a.basic_mtbf_regulate
WHEN a.reliab_distrib_type = 2 THEN
1 * a.basic_mtbf_operating_ratio / a.basic_mtbf_regul_succ_rate
ELSE 0 END
) AS WeightedFailure,
sum(
CASE
WHEN b.product_type < 5 THEN
1 * 1 * a.repair_mttcr / a.basic_mtbf_regulate
WHEN a.repairable = 1 and a.reliab_distrib_type = 1 THEN
1 * a.basic_mtbf_operating_ratio * a.repair_mttcr / a.basic_mtbf_regulate
WHEN a.repairable = 1 and a.reliab_distrib_type = 2 THEN
1 * a.basic_mtbf_operating_ratio * a.repair_mttcr / a.basic_mtbf_regul_succ_rate
ELSE 0
END
) AS WeightedMttr
FROM
param_data a,
product_model b,
product_model c
WHERE 1 = 1
and c.ship_id = ${shipId} and c.product_type = ${productType} and c.is_delete = 0
and b.ship_id = ${shipId} and b.pid = c.id and b.is_delete = 0
and a.IS_DELETE = 0 and a.product_id = b.id
AND ( (b.product_type = 5 AND a.basic_join_compute = 1
and ((
a.reliab_distrib_type = 1
AND a.basic_mtbf_regulate > 0
)
OR ( a.reliab_distrib_type = 2 AND a.basic_mtbf_regul_succ_rate > 0 ))
)
|| (b.product_type < 5 AND a.basic_mtbf_regulate > 0 ) )
GROUP BY c.id,c.name
) c
)d set f.basic_mtbf_regulate = d.basic_mtbf_regulate,
f.repair_mttcr = d.repair_mttcr
where f.product_id = d.id;
UPDATE param_data a, product_model b
SET ai = basic_mtbf_regulate / (basic_mtbf_regulate + repair_mttcr)
where b.ship_id = ${shipId}