- ベストアンサー
Accessのテーブルの差額を出すピボット方法
- Access2007を使用して2つのテーブルのデータをピボットで表示したい場合、ユニオンクエリを使ってテーブルAとテーブルBをまとめ、ピボットを作成します。
- ピボットを作成する際には、各テーブルの区分、品番、金額、数量の列を考慮し、ピボットテーブルでそれぞれの列の合計値を表示します。
- そして、差額の計算を行うために、差額列を追加し、テーブルAの金額からテーブルBの金額を引いた値を表示します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
グループ化した場合、GROUP BY 句で指定しない項目は集計関数を使う 必要があります。(1)を全部書いてしまうと、次のようになります。 SELECT A.品番 AS 品番,SUM(A.数量) AS A数量,SUM(A.金額) AS A金額, SUM(B.数量) AS B数量,SUM(B.金額) AS B金額 FROM テーブルA AS A LEFT JOIN テーブルB AS B ON A.品番=B.品番 GROUP BY A.品番 UNION SELECT B.品番 AS 品番,SUM(A.数量) AS A数量,SUM(A.金額) AS A金額, SUM(B.数量) AS B数量,SUM(B.金額) AS B金額 FROM テーブルA AS A RIGHT JOIN テーブルB AS B ON A.品番=B.品番 GROUP BY B.品番 ちょっと説明不足でしたね。
その他の回答 (2)
- nda23
- ベストアンサー率54% (777/1416)
(1)クエリ SELECT A.品番 AS 品番,SUM(A.数量) AS A数量,SUM(A.金額) AS A金額, SUM(B.数量) AS B数量,SUM(B.金額) AS B金額 FROM テーブルA AS A LEFT JOIN テーブルB AS B ON A.品番=B.品番 UNION SELECT B.品番 AS 品番,SUM(A.数量) AS A数量,SUM(A.金額) AS A金額, SUM(B.数量) AS B数量,SUM(B.金額) AS B金額 FROM テーブルA AS A RIGHT JOIN テーブルB AS B ON A.品番=B.品番 (2)目的のSQL SELECT 品番,A数量,A金額,B数量,B金額, NZ(A金額,0)-NZ(B金額,0) AS 差額 FROM クエリ
補足
詳しい記述をありがとうございます。 早速、(1)のクエリを作り実行したところ 「集計関数の一部として指定された式'品番'を含んでいないクエリを 実行しようとしました。」とエラーメッセージが出てしまいました。 フィールド名も特に間違いはありませんでしたし、変な位置に改行を入れてしまっていないかなど確認したのですが、特に見当たりません。 何が考えられますでしょうか? いろいろと質問してしまい申し訳ありません。 ちなみに、区分も品番もテキスト型なのですが、何か関係ありますでしょうか?
- nda23
- ベストアンサー率54% (777/1416)
単に Nz(A金額,0)-Nz(B金額,0) で良いのでは?
補足
早速のご回答ありがとうございます。 ピボットのどこに上記の式を入れればよいのでしょうか? その辺りがよくわかっていません。 申し訳ありませんがよろしくお願いいたします。
お礼
ありがとうございます。 このままだと、各数量と各金額が2倍の値になってしまったので、ちょっと考えてみます。 とても助かりました。ありがとうございました。