Jeg tror, at dette burde gøre det:
INSERT INTO mapped (f1_new, f2_new, fk_new)
SELECT f1_new, f2_new, fk_new from (
SELECT f1_new, @f2 := if(f1_new = @prev_f1, @f2+1, 0) f2_new, fk_new, @prev_f1 := f1_new
FROM (select f1 AS f1_new, CASE WHEN fk IN (100, 200) THEN 'A'
WHEN fk in (300, 400) THEN 'B'
WHEN fk = 500 THEN 'C'
END AS fk_new
FROM origin
GROUP BY f1_new, fk_new
ORDER BY f1_new, fk_new) new,
(SELECT @f2 := NULL, @prev_f1 := NULL) vars
) x