アプリ版:「スタンプのみでお礼する」機能のリリースについて

Access超初心者です。
色々検索してみても、解決に至らず、質問させて頂きます。

下記のような、2つのテーブルが存在していて
テーブル1の金額から、テーブル2の金額を引き算した結果のテーブル3を表示させたいのです。
引き算をする条件は、同じ(予算CD)&同じ(月)に対応するレコードです。
仕様上、二つのテーブルを結合はさせたくありません。

テーブル1は、CD別・月別で既に金額が振り分けてあり
テーブル2は、CD別・月別で一旦集計をし(重複レコードが発生するため)、
テーブル1の対応するレコードより引き算をしたいです。

■テーブル1
予算CD 月 予算金額
================
 1   1 \100,000
 1   2 \200,000
 2   1 \100,000
 2   2 \200,000

■テーブル2
予算CD 月 実行金額
================
 1   1 \50,000
 1   1 \10,000 ←重複レコード発生あり
 2   1 \50,000
 2   2 \10,000 
 1   1 \0    ←こんなのが発生することもあり

■テーブル3(これを出したい)
予算CD 月 予算残額
================
 1   1 \40,000
 1   2 \200,000
 2   1 \50,000
 2   2 \190,000


恐らくSQLで解決するのかな…と思うのですが、色々例を見てみても
複数条件での引き算となると、理解が追い付きません。
勉強不足で大変恐縮なのですが、どうぞご教授頂きますよう、お願い致します。

A 回答 (1件)

予算金額: Nz(DSum("予算金額", "テーブル1","予算CD='"&[予算CD]&"' AND 月='"&[月]&"'"),0) - Nz(DSum("実行金額", "テーブル2","予算CD='"&[予算CD]&"' AND 月='"&[月]&"'"),0)



かな?
実行していないんで、正しいかどうか分かりませんが。

DSum関数は、指定したテーブル/クエリの1つのフィールドの和を返します。WHERE条件を指定することもできます。
ですので、テーブル1の金額の和から、テーブル2の金額の和を引いて、求められます。

Nz関数は、DSumで条件となるレコードがない場合に、0を返させるものです。

他にも、SQLを書ければ、UNIONしてSumで求めるという方法もありますが、Accessにおいては、関数を用いた方がサクサク動く気がします。

※重複レコードというのは、どういう意味で用いているのか分からなかったです。
DISTINCTなどで除外できますが、多分そういうことではなさそうなので、無視して書きました。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
ちょっと、明日にならないとPC触れないので、明日試してみてまたご報告させて頂きます!

お礼日時:2017/05/24 09:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています