2013-10-17 4 views
13

OK.SQL: Comment SOMME deux valeurs de tables différentes

J'ai été mis sur un projet au travail, et même si j'ai quelques compétences SQL, ils sont très rouillés. L'un des scénarios à l'œuvre m'a laissé un certain nombre de tables avec des valeurs dont j'ai besoin pour résumer. Ils ne sont pas liés non plus, mais l'ordre est le même dans toutes les tables.

Fondamentalement, je voudrais profiter de ces deux tables:

CASH TABLE 
London 540 
France 240 
Belgium 340 

CHEQUE TABLE 
London 780 
France 490 
Belgium 230 

Pour obtenir une sortie comme celui-ci pour alimenter une application graphique des:

London 1320 
France 730 
Belgium 570 

S'il vous plaît aider.

+0

Conseil 'UNION',' 'GROUP BY' et SUM' sera utile. – zero323

Répondre

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 

Et ainsi de suite et ainsi de suite.

+1

'London' est une entrée dans la table pas une colonne –

+1

De cette façon, quand même une des SUMs est NULL, tout le "résultat" sera nul, alors c'est la manière la plus simple mais la moins fiable, malheureusement .. . – TheCuBeMan

0

Pour votre structure actuelle, vous pouvez aussi essayer ce qui suit:

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

Je pense que je préfère une union entre les deux tables, et un groupe par le nom du pays comme mentionné ci-dessus.

Mais je vous recommande également de normaliser vos tables. Idéalement, vous auriez une table de pays, avec ID et nom, et une table de paiements avec: CountryId (FK aux pays), Total, Type (argent/chèque)

1

vous pouvez également essayer cela en 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

ou essayez d'utiliser la somme, l'union

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