2013-10-17 18 views
13

Okay.SQL: How to SUM zwei Werte aus verschiedenen Tabellen

Ich habe ein Projekt bei der Arbeit, und obwohl ich einige SQL-Fähigkeiten habe, sind sie sehr rostig.

Eines der Szenarien bei der Arbeit hat mir eine Reihe von Tabellen mit Werten, die ich zusammenfassen muss. Sie sind auch nicht verknüpft, aber die Reihenfolge ist in allen Tabellen gleich.

Grundsätzlich würde Ich mag diese beiden Tabellen nehmen:

CASH TABLE 
London 540 
France 240 
Belgium 340 

CHEQUE TABLE 
London 780 
France 490 
Belgium 230 

Um eine Ausgabe wie folgt zu erhalten in eine grafische Darstellung Anwendung zu füttern:

London 1320 
France 730 
Belgium 570 

Bitte helfen.

+0

Hinweis 'UNION',' GROUP BY' und 'SUM' wird nützlich sein. – zero323

Antwort

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 

‚Und so weiter und so fort.

+1

'London' ist ein Eintrag in der Tabelle keine Spalte –

+1

Auf diese Weise, wenn auch nur eine der SUMME NULL ist, wird das gesamte "Ergebnis" Null sein, so das ist der einfachste Weg, aber der am wenigsten vertrauenswürdige Weg, leider .. . – TheCuBeMan

0

Für Ihre aktuelle Struktur, könnten Sie auch folgende versuchen:

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

Ich glaube, ich es vorziehen, eine Verbindung zwischen den beiden Tabellen, und eine Gruppe von auf den Namen Land wie oben erwähnt.

Aber ich würde auch empfehlen, Ihre Tabellen zu normalisieren. Idealerweise hätten Sie eine Landtabelle mit Id und Name und eine Zahlungstabelle mit: CountryId (FK zu Ländern), Summe, Typ (Bargeld/Scheck)

1

Sie können dies auch in SQL-Server versuchen! !

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

demo

oder versuchen Summe verwenden, Vereinigung

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