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}