SELECT mo.name, v1.val, v2.val, v3.val
FROM mo
JOIN val as v1 on v1.mo = mo.id and v1.year = 2019
JOIN val as v2 on v2.mo = mo.id and v2.year = 2020
JOIN val as v3 on v3.mo = mo.id and v3.year = 2021
Что-то такого плана, верно? Не сильно ли это нагружать будет при работе допустим с 100 городами и для кжадого по 7 годов