Ciao a tutti, ho 4 tabelle: clienti, ricevute, prodotti_ricevuta, prestazioni_ricevuta:
clienti:
id_cliente
nome

ricevute:
id_ricevuta
id_cliente
data_ricevuta

prodotti_ricevuta:
id_ricevuta
quantita
prezzo

prestazioni_ricevuta:
id_ricevuta
quantita
prezzo

Vorrei ottenere l'elenco di tutte le ricevute, emesse in un determinato anno, comprensivo del totale per ogni ricevuta (dato dalla tabella prodotti+prestazioni).
In pratica ogni riga deve essere cosi composta:
DATA RICEVUTA | CLIENTE | TOTALE RICEVUTA |

Sono riuscito a farlo con la seguente query:
codice:
SELECT ricevute.*, clienti.nome AS cliente, r.somma_totale
FROM (clienti INNER JOIN ricevute ON clienti.id_cliente = ricevute.id_cliente)
INNER JOIN (SELECT ricevute.id_ricevuta,  Sum(p.totale) AS somma_totale
            FROM ricevute 
            INNER JOIN (SELECT prestazioni_ricevuta.id_ricevuta,  Sum(prestazioni_ricevuta.quantita*prestazioni_ricevuta.prezzo) AS totale
                        FROM prestazioni_ricevuta 
                        GROUP BY  prestazioni_ricevuta.id_ricevuta
                        UNION
                        SELECT  prodotti_ricevuta.id_ricevuta,  Sum(prodotti_ricevuta.quantita*prodotti_ricevuta.prezzo) AS totale
                        FROM prodotti_ricevuta
                        GROUP BY  prodotti_ricevuta.id_ricevuta
                       ) AS p ON ricevute.id_ricevuta = p.id_ricevuta
            GROUP BY ricevute.id_ricevuta
           ) AS r ON ricevute.id_ricevuta=r.id_ricevuta
WHERE year(ricevuta.data_ricevuta)=2011;
Mi sembra che sia troppo complessa... c'è un modo migliore per ottenere quanto mi serve?
Grazie