Illustro rapidamente il problema, in un semplicissimo software di contabilità ho 2 tabelle:
tabella movimenti, dove vengono registrati i movimenti monetari, c'è una colonna "cifra" nella quale viene messa la cifra da movimentare, una colonna "tipo_movimento" nella quale 0 sta per versamento in ingresso e 1 per versamento in uscita e una colonna "id_riferimento" che contiene l'id della persona che ha effettuato il movimento, l'id della persona si trova nella:
tabella persone, colonna id= id della persona, colonna nome, colonna cognome con funzioni ovvie...
Ora la questione è: con una sola query vorrei ottenere un elenco formattato come:
cognome - nome - cifra totale (intesa come somma movimenti in ingresso MENO somma movimenti in uscita per quella singola persona),
con una query del genere:
SELECT persone.cognome || ' ' || persone.nome AS fullname,SUM(movimenti.cifra) AS totale_dare
FROM movimenti
JOIN persone
ON persone.id=movimenti.id_riferimento
WHERE tipo_movimento=1
GROUP BY fullname
riesco ad ottenere un elenco di cognome,nome e totale cifra da dare.... come faccio con un'unica query a far sottrarre dalla cifra da dare, le cifre versate, tenendo conto che il movimento dare o avere viene controllato dalla colonna tipo_movimento come su detto ?
(utilizzo firebird, ma la struttura della query dovrebbe valere per tutti a meno dell'operatore di concatenazione (||) valido solo per oracle)