• ベストアンサー

ACCESS 集計

親テーブルと子テーブル1、親テーブルと子テーブル2をそれぞれ結合(1:多←0の場合もあり)させ、「親のキー」「子1の集計結果」「子2の集計結果」を結果として表示させたいのですが、1つのクエリで実行することは可能でしょうか? 詳しくは添付画像を見てください。

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

SQLビューでの記述で良いですか。 まず、子テーブル1で集計します(例では合計) SELECT 品番, Sum(数量) AS 数量計, Sum(金額) AS 金額計 FROM 子テーブル1 GROUP BY 品番 これと親テーブルを結び付けます ★ この時、子テーブルの集計結果に別名を付けておきます(以下では T1) (T1 の品番と、親テーブルの品番で結び付け) 親テーブル LEFT JOIN (SELECT 品番, Sum(数量) AS 数量計, Sum(金額) AS 金額計 FROM 子テーブル1 GROUP BY 品番) AS T1 ON T1.品番 = 親テーブル.品番 次に子テーブル2で集計します SELECT 品番, Sum(数量) AS 数量計, Sum(金額) AS 金額計 FROM 子テーブル2 GROUP BY 品番 これを★と結びつけます(同様に上記子テーブル2の結果の別名を T2) (親テーブル LEFT JOIN (SELECT 品番, Sum(数量) AS 数量計, Sum(金額) AS 金額計 FROM 子テーブル1 GROUP BY 品番) AS T1 ON T1.品番 = 親テーブル.品番) LEFT JOIN (SELECT 品番, Sum(数量) AS 数量計, Sum(金額) AS 金額計 FROM 子テーブル2 GROUP BY 品番) AS T2 ON T2.品番 = 親テーブル.品番 そして、表示するもの、並び替えを指定します SELECT 親テーブル.品番, 親テーブル.品名 , T1.数量計 AS 数量計1, T1.金額計 AS 金額計1 , T2.数量計 AS 数量計2, T2.金額計 AS 金額計2 FROM (親テーブル LEFT JOIN (SELECT 品番, Sum(数量) AS 数量計, Sum(金額) AS 金額計 FROM 子テーブル1 GROUP BY 品番) AS T1 ON T1.品番 = 親テーブル.品番) LEFT JOIN (SELECT 品番, Sum(数量) AS 数量計, Sum(金額) AS 金額計 FROM 子テーブル2 GROUP BY 品番) AS T2 ON T2.品番 = 親テーブル.品番 ORDER BY 親テーブル.品番; クエリの表示をデザインにして、どうなっているのか確認してみてください。 なお、各子テーブルで日付で絞り込む時があれば、 SELECT 品番, Sum(数量) AS 数量計, Sum(金額) AS 金額計 FROM 子テーブル1 WHERE 日付 BetWeen #2010/10/28# AND #2011/10/27# GROUP BY 品番 のように子テーブルで集計する時に組み込んでみてください。 ※ 画像が良く見えなかったので違う事を書いているかも・・・・   自己責任で判断・解釈してください。

mame0222
質問者

お礼

ご回答ありがとうございます。 デザインビューを使って、少しだけやる程度の知識しかなかったので、理解するのに時間がかかってしまいましたが、まさにやりたかったことが出来ました。 デザインビューの方で見てみましたが、そちらだけでは出来なそうですね・・・ これを期に、SQLを勉強してみたいと思います。 本当にありがとうございました。

関連するQ&A

専門家に質問してみよう