Vista la panoramica delle soluzioni applicabili, aggiungo, solo per completezza didattica, la implementazione nella versione che impiega la sintassi con parametri.
Essendo due le query, di cui una in cascata all'altra, i parametri possono essere inseriti nell'una o nell'altra (purché i campi o i valori calcolati siano accessibili attraverso il proprio nome o alias).
Ad esempio se la query iniziale, da cui si è partiti (M_Costo_Eve_Cap) ha all'interno anche il dato del valore di riferimento con cui selezionare i dati: Year([data_mov]) come alias pari ad "Anno"
SELECT Eventi.evento, Movimenti.id_capitolo, Movimenti.movimento, Movimenti.data_mov, Year([data_mov]) AS Anno
FROM Eventi INNER JOIN Movimenti ON Eventi.ID_Eve = Movimenti.id_evento
GROUP BY Eventi.evento, Movimenti.id_capitolo, Movimenti.movimento, Movimenti.data_mov, Year([data_mov]), Eventi.ID_Eve;
si può impostare il valore con cui filtrare i dati anche nella query a campi incrociati (M_Costo_Eve_Cap_Cl) ponendo il parametro ([forms]![M_Costo_Eve_Cap].[testo3]) che verrà associato nella condizione WHERE per estrarre l'anno a cui far riferimento:
PARAMETERS [forms]![M_Costo_Eve_Cap].[testo3] Long;
TRANSFORM Int(Sum([movimento])) AS Cap
SELECT Q_Costo_Eve_Cap.evento, Int(Sum([movimento])) AS Totale
FROM Q_Costo_Eve_Cap
WHERE (((Q_Costo_Eve_Cap.Anno)=[forms]![M_Costo_Eve_Cap].[testo3]))
GROUP BY Q_Costo_Eve_Cap.evento, Q_Costo_Eve_Cap.Anno
PIVOT Q_Costo_Eve_Cap.id_capitolo;
che se andiamo a verificare è similare alla prima query a campi incrociati posta dall'OP (a meno della, erronea, Like al posto della uguaglianza nei criteri) e che non trovava soluzione, come già indicato, per i dati mancanti su cui filtrare i valori annuali.