Jag tror att du har det här felet eftersom du har rader som har samma v_report_id på användningssatsen. Kan du prova detta
merge into test_output target_table
USING (SELECT
CASE WHEN c.test_code = 1 THEN b.mean_diff
WHEN c.test_code = 2 THEN b.norm_dist
WHEN c.test_code = 3 THEN b.ks_stats
WHEN c.test_code = 4 THEN b.ginni
WHEN c.test_code = 5 THEN b.auroc
WHEN c.test_code = 6 THEN b.info_stats
WHEN c.test_code = 7 THEN b.kl_stats
END val1
FROM combined_approach b inner join test_output c
on b.v_report_id = c.v_report_id
and c.upper_score = b.band_code
WHERE c.v_report_id = lv_report_id
group by v_report_id
) source_table
on (target_table.v_report_id = source_table.v_report_id
and target_table.v_report_id = lv_report_id)
when matched then update
SET target_table.upper_value = source_table.val1;