Ecco le query usate:
1 - union query per avere un campo [ANNO] universale*:
SELECT year([DATA PAGAMENTO AFFITTO]) AS [ANNO] FROM t_pagamenti_affitto UNION SELECT year([DATA SPESA]) FROM t_spese;
2 - union query per avere campo [NOME PROPRIETà] universale*:
SELECT [npropu] AS [N PROP]
FROM (SELECT Year([DATA PAGAMENTO AFFITTO]) AS [ANNO P], Sum(t_pagamenti_affitto.[SOMMA PAGATA]) AS [TOT E], t_proprietà.[NOME PROPRIETà] AS [npropu] FROM (t_proprietà INNER JOIN t_inquilini ON t_proprietà.ID_PROPRIETà = t_inquilini.id_proprietà) LEFT JOIN t_pagamenti_affitto ON t_inquilini.ID_INQUILINO = t_pagamenti_affitto.id_inquilino GROUP BY Year([DATA PAGAMENTO AFFITTO]), t_proprietà.[NOME PROPRIETà]) AS sbq_entrate
UNION SELECT [nprope]
FROM
(SELECT Year([DATA SPESA]) AS [ANNO S], Sum(t_spese.[AMMONTARE SPESA]) AS [TOT U], t_proprietà.[NOME PROPRIETà] AS [nprope], t_proprietà.ID_PROPRIETà FROM t_proprietà INNER JOIN t_spese ON t_proprietà.ID_PROPRIETà = t_spese.id_proprietà GROUP BY Year([DATA SPESA]), t_proprietà.[NOME PROPRIETà], t_proprietà.ID_PROPRIETà) AS sbq_uscite;
3 - la query vera e propria con le due subquery:
SELECT sbq_entrate.[TOT E], sbq_uscite.[TOT U], Q_PROPERTY.[N PROP], Q_anno.ANNO
FROM Q_anno, Q_PROPERTY,
(SELECT Year([DATA PAGAMENTO AFFITTO]) AS [ANNO P], Sum(t_pagamenti_affitto.[SOMMA PAGATA]) AS [TOT E], t_proprietà.[NOME PROPRIETà] AS [npropu]
FROM (t_proprietà INNER JOIN t_inquilini ON t_proprietà.ID_PROPRIETà = t_inquilini.id_proprietà) LEFT JOIN t_pagamenti_affitto ON t_inquilini.ID_INQUILINO = t_pagamenti_affitto.id_inquilino
GROUP BY Year([DATA PAGAMENTO AFFITTO]), t_proprietà.[NOME PROPRIETà]) AS sbq_entrate,
(SELECT Year([DATA SPESA]) AS [ANNO S], Sum(t_spese.[AMMONTARE SPESA]) AS [TOT U], t_proprietà.[NOME PROPRIETà] AS [nprope], t_proprietà.ID_PROPRIETà
FROM t_proprietà INNER JOIN t_spese ON t_proprietà.ID_PROPRIETà = t_spese.id_proprietà
GROUP BY Year([DATA SPESA]), t_proprietà.[NOME PROPRIETà], t_proprietà.ID_PROPRIETà) AS sbq_uscite
WHERE (((sbq_entrate.npropu)=[N PROP]) AND ((sbq_uscite.nprope)=[N PROP]));
ora, specifico che la query unione del punto 2 (la Q_PROPERTY) è stata ricavata dall'unione dei campi delle subquery della query al punto 3, e non sono sicuro che sia corretto (una sorta di ripetizione o loop);
le due subquery funzionano a perfezione: ottengo il risultato diviso per anno e per proprietà, il problema è quando provo a metterle insieme che salta tutto.
spero di essermi spiegato a sufficienza.
*ovvero le date e le entrate/uscite presenti nelle due tabelle possono differire;