I had a simmilar problem but I used the virtual queries (as I call 'em, no technical reference to use that name but my common [?] sense). The problem is I haven't tested them with too many queries. I grouped them with the
AS SQL instruction. Look at this code:
SELECT MUNICIPAL.Cve_Mpio,
FirstQuery.Municipio,
FirstQuery.Obras,
SecondQuery.Inversión
FROM ([SELECT fonden_porMunicipio2.Municipio, Sum(fonden_porMunicipio2.Obras) AS Obras
FROM fonden_porMunicipio2
GROUP BY fonden_porMunicipio2.Municipio, fonden_porMunicipio2.Tipo
HAVING ((fonden_porMunicipio2.Tipo) Like "Obra"

].
AS FirstQuery LEFT JOIN [SELECT fonden_porMunicipio2.Municipio, Sum(fonden_porMunicipio2.Inversión) AS Inversión
FROM fonden_porMunicipio2
GROUP BY fonden_porMunicipio2.Municipio].
AS SecondQuery ON FirstQuery.Municipio = SecondQuery.Municipio) LEFT JOIN MUNICIPAL ON FirstQuery.Municipio = MUNICIPAL.MUNICIPIO;
If you use the Design View to see the graphic representation of this code, you'll see FirstQuery and SecondQuery as tables related to the query containing them.
Before I get to this solution, I used to build temporary QueryDefs, then a big QueryDef using the temporary ones. So I can recommend this method too. Use VBA if you want to debug or trap the error in the making. Both methods can be applied using VBA, so try 'em.
No liability involved in the loss of your data while trying these methods... Just kidding man!
To boldly code, where no programmer has compiled before!