2013-10-17 17 views
13

OK.SQL: jak SUMA dwie wartości z różnych tabel

Zostałem postawiony na projekt w pracy i choć mam pewne umiejętności SQL, są bardzo zardzewiałe.

Jeden ze scenariuszy przy pracy pozostawił mi wiele tabel z wartościami, które muszę podsumować. Nie są też połączone, ale kolejność jest taka sama we wszystkich tabelach.

Zasadniczo chciałbym wziąć te dwie tabele:

CASH TABLE 
London 540 
France 240 
Belgium 340 

CHEQUE TABLE 
London 780 
France 490 
Belgium 230 

Aby uzyskać moc tak, aby karmić się w graficznym aplikacji:

London 1320 
France 730 
Belgium 570 

Proszę o pomoc.

+0

Podpowiedź 'unia,' GROUP BY' i 'SUM' będzie przydatna. – zero323

Odpowiedz

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 

„i tak dalej, i tak dalej.

+1

"Londyn" to wpis w tabeli, a nie kolumna –

+1

W ten sposób, gdy nawet jeden z SUM będzie NULL, cały "wynik" będzie zerowy, więc jest to najprostszy, ale najmniej zaufany sposób, niestety .. . – TheCuBeMan

0

dla bieżącej struktury, można też spróbować wykonać następujące czynności:

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

Chyba wolą unię między dwiema tabelami i grupy przez nazwę kraju, jak wspomniano powyżej.

Ale polecam również normalizację stołów. Najlepiej byłoby mieć tabelę krajów z identyfikatorem i nazwą oraz tabelą płatności z: CountryId (FK do krajów), Total, Type (gotówka/czek)

1

możesz również wypróbować to w 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

lub spróbuj użyć sumę, unia

select sum(total) as mytotal,city 
from 
(
    select * from cash union 
    select * from cheque 
) as vij 
group by city 
Powiązane problemy