2013-10-17 29 views
13

OK.SQL: Come eseguire il SUM due valori da tabelle diverse

Sono stato messo su un progetto al lavoro, e anche se ho alcune competenze SQL, sono molto arrugginite.

Uno degli scenari al lavoro mi ha lasciato un numero di tabelle con valori che ho bisogno di riassumere. Non sono nemmeno collegati, ma l'ordine è lo stesso su tutti i tavoli.

In sostanza, vorrei prendere questo due tabelle:

CASH TABLE 
London 540 
France 240 
Belgium 340 

CHEQUE TABLE 
London 780 
France 490 
Belgium 230 

per ottenere un output come questo per alimentare in un'applicazione graficamente:

London 1320 
France 730 
Belgium 570 

prega di aiuto.

+0

Suggerimento 'UNION',' GRUPPO BY' e 'SUM' sarà utile. – zero323

risposta

34
select region,sum(number) total 
from 
(
    select region,number 
    from cash_table 
    union all 
    select region,number 
    from cheque_table 
) t 
group by region 
9
SELECT (SELECT SUM(London) FROM CASH) + (SELECT SUM(London) FROM CHEQUE) as result 

'E così via e così via.

+1

'London' è una voce nella tabella non una colonna –

+1

In questo modo, quando anche uno dei SUM è NULL, l'intero "risultato" sarà nullo, quindi questo è il modo più semplice ma meno affidabile, sfortunatamente .. . – TheCuBeMan

0

Per la vostra struttura attuale, si potrebbe anche provare il seguente:

select cash.Country, cash.Value, cheque.Value, cash.Value + cheque.Value as [Total] 
from Cash 
join Cheque 
on cash.Country = cheque.Country 

credo di preferire l'unione tra le due tabelle, e un gruppo per il nome del paese di cui sopra.

Ma consiglio anche di normalizzare le tabelle. Idealmente avresti una tabella nazionale, con Id e Nome, e una tabella pagamenti con: CountryId (FK per paesi), Totale, Tipo (contanti/assegno)

1

puoi anche provare questo in sql-server! !

select a.city,a.total + b.total as mytotal from [dbo].[cash] a join [dbo].[cheque] b on a.city=b.city 

demo

o provare a utilizzare somma, l'unione

select sum(total) as mytotal,city 
from 
(
    select * from cash union 
    select * from cheque 
) as vij 
group by city 
Problemi correlati