2013-10-17 32 views
13

いいえ。SQL:異なるテーブルから2つの値を合計する方法

私は仕事中にプロジェクトに参加しましたが、SQLスキルはありますが、非常に錆びています。

作業中のシナリオの1つは、私が要約する必要がある値を持つテーブルを数多く残しています。それらはリンクされていませんが、順序はすべてのテーブルで同じです。

基本的に、私はこの2つのテーブルを利用したいと思います:

CASH TABLE 
London 540 
France 240 
Belgium 340 

CHEQUE TABLE 
London 780 
France 490 
Belgium 230 

をグラフ化アプリケーションに供給するために、このような出力を取得するには:

London 1320 
France 730 
Belgium 570 

は助けてください。

+0

ヒント 'UNION'、' GROUP BY'と 'SUM'は有用であろう。 – zero323

答えて

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 

「などなどなど。

+1

'London'は列内のテーブルではない –

+1

このように、SUMのうちの1つでもNULLの場合、結果全体がNULLになるため、最も簡単な方法ですが、残念ながら最も信頼できない方法です。 。 – TheCuBeMan

0

あなたの現在の構造のために、あなたはまた、次のことを試みることができる:

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

私は上記のように、私は国名上で2つのテーブル間労働組合、およびグループを好むと思います。

しかし、テーブルの正規化もお勧めします。理想的には、Idと名前の国テーブルと、次の住所を持つ支払いテーブルがあります。 CountryId(国別FK)、合計、タイプ(現金/小切手)

1

これもSQLサーバーで試すことができます。 !

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

demo

または合計を使用してみてください、組合

select sum(total) as mytotal,city 
from 
(
    select * from cash union 
    select * from cheque 
) as vij 
group by city 
関連する問題