好きなおでんの具材ドラフト会議しましょう

2つのテーブル内に[会社]と[金額]というフィールドがあり、[会社]毎に[金額]の合計を出力し、比較結果を出力するにはどうしたらよいでしょうか。

■テーブル1
会社|金額
A |50
B |100
C |200
A |300

■テーブル2
会社|金額
B |100
C |100
D |300
C |100

■結果
会社|テーブル1金額|テーブル2金額|比較結果
A |350 |0 |NG
B |100 |100 |OK
C |200 |200 |OK
D |0 |300 |NG

A 回答 (1件)

休日だけど気力を振り絞ってやってみた。



最初に、テーブル1 のレコードを整理するクエリを作る。
例で説明すれば 2回出てきた "会社A" の金額を合計して 350円となるようにするクエリ。
単純な集計クエリで、会社フィールドをグループ化して金額フィールドを合計してるだけ。
クエリの名前は 「クエリ1」 とした。
以下は SQL で表現。

SELECT [テーブル1].会社, Sum([テーブル1].金額) AS テーブル1金額
FROM テーブル1
GROUP BY [テーブル1].会社;


テーブル2 にも同じことをするためのクエリを作る。
クエリの名前は 「クエリ2」 とした。

SELECT [テーブル2].会社, Sum([テーブル2].金額) AS テーブル2金額
FROM テーブル2
GROUP BY [テーブル2].会社;


次に、すべての会社名のリストを出力するためのクエリを作成する。
これはユニオン クエリで作成する。テーブル1 とテーブル2 の合体で作ってもいいし、クエリ1 とクエリ2 の合体で作ってもいい。
今回はクエリ1 とクエリ2 の合体で作ってみた。
クエリの名前は 「クエリ3」 とした。

SELECT 会社 FROM クエリ1
UNION SELECT 会社 FROM クエリ2;


まだまだ続く。
今度はすべての会社名リストの会社名に対してクエリ1 (基となっているのはテーブル1) の金額をくっつけるクエリを作る。
これは単純な外部結合のクエリで、テーブル1 に存在しない会社の金額は空白で出力される。
クエリの名前は 「クエリ4」 とした。

SELECT [クエリ3].会社, [クエリ1].[テーブル1金額]
FROM クエリ3 LEFT JOIN クエリ1 ON [クエリ3].会社 = [クエリ1].会社;


同様に、会社名リストとクエリ2 の金額を対象にした外部結合のクエリを作る。
クエリの名前は 「クエリ5」 とした。

SELECT [クエリ3].会社, [クエリ2].[テーブル2金額]
FROM クエリ3 LEFT JOIN クエリ2 ON [クエリ3].会社 = [クエリ2].会社;

最後、クエリ4 とクエリ5 を単純な内部結合で合体し、比較結果を "OK" "NG" で表示するようにしたクエリを作成する。
クエリの名前は 「クエリ6」 ってした。

SELECT [クエリ4].会社, [クエリ4].[テーブル1金額], [クエリ5].[テーブル2金額], IIf([クエリ4]![テーブル1金額]=[クエリ5]![テーブル2金額],"OK","NG") AS 比較結果
FROM クエリ4 INNER JOIN クエリ5 ON [クエリ4].会社 = [クエリ5].会社;

クエリ6 がお望みの表になっているかと思う。
もっと少ない素材でできるかもしれないが、それはデータベースの先輩たちに任せます。
    • good
    • 1
この回答へのお礼

お休みのところ、詳細にご教授頂きありがとうございます。
問題が解決致しました。

省略する必要性はございませんので、ご教授頂いた方法で利用させて頂きます。
ありがとうございました。

お礼日時:2016/04/27 14:15

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

関連するカテゴリからQ&Aを探す


おすすめ情報