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}