Dovrebbe essere così
codice:
select categ,sum(nv) as non_vuota,sum(v) as vuota,sum(nv+v) as totale from (
SELECT categ1 as categ,sum(iif(email<>"",1,0)) as nv,sum(iif(email="" or isnull(email),1,0)) as v
FROM Tabella
group by categ1
union all
SELECT categ2,sum(iif(email<>"",1,0)) as non_vuota,sum(iif(email="" or isnull(email),1,0))
FROM Tabella
group by categ2
union all
SELECT categ3,sum(iif(email<>"",1,0)) as non_vuota,sum(iif(email="" or isnull(email),1,0))
FROM Tabella
group by categ3) as tab
where categ is not null
group by categ
Mi sembra di ricordare che access consenta la union di un numero limitato di tabelle. Dubito possa farlo per 40 tabelle. Credo debba fare unioni di un numero ridotto di tabelle e poi unire ulteriormente quelle.