こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access2つのテーブルの差額を出すピボット

Access2007を使用しています。

以下のような2つのテーブルがあります。
<テーブルA>
区分 品番 金額  数量
A  001 10000  10
A  S12 5000   5
A  002 8000   8
A  001 6000   6

<テーブルB>
区分 品番 金額  数量
B  001 2000  2 
B  S12 3000  3

このデータを元に、以下のような結果をピボットで表示したいと思っています。
      区分
      A  |  B   |合計
品番  数量 金額|数量 金額 |数量 金額 差額(A-B)
001 16 16000| 2 2000 | 18 18000 14000
002 8 8000 |      | 8  8000  8000
S12 5 5000 | 3 3000 | 8  8000  2000

テーブルAとBをユニオンクエリでまとめ、ピボットを作って
みたのですが、差額の部分が出せず・・・
どうぞよろしくお願いします。

投稿日時 - 2009-08-28 11:10:59

QNo.5243096

すぐに回答ほしいです

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

グループ化した場合、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.品番

ちょっと説明不足でしたね。

投稿日時 - 2009-08-31 20:50:03

お礼

ありがとうございます。
このままだと、各数量と各金額が2倍の値になってしまったので、ちょっと考えてみます。
とても助かりました。ありがとうございました。

投稿日時 - 2009-09-03 10:00:41

ANo.3

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

(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 クエリ

投稿日時 - 2009-08-31 13:51:24

補足

詳しい記述をありがとうございます。
早速、(1)のクエリを作り実行したところ
「集計関数の一部として指定された式'品番'を含んでいないクエリを
実行しようとしました。」とエラーメッセージが出てしまいました。
フィールド名も特に間違いはありませんでしたし、変な位置に改行を入れてしまっていないかなど確認したのですが、特に見当たりません。
何が考えられますでしょうか?
いろいろと質問してしまい申し訳ありません。
ちなみに、区分も品番もテキスト型なのですが、何か関係ありますでしょうか?

投稿日時 - 2009-08-31 16:28:50

ANo.1

単に Nz(A金額,0)-Nz(B金額,0) で良いのでは?

投稿日時 - 2009-08-28 11:44:14

補足

早速のご回答ありがとうございます。
ピボットのどこに上記の式を入れればよいのでしょうか?
その辺りがよくわかっていません。
申し訳ありませんがよろしくお願いいたします。

投稿日時 - 2009-08-28 13:08:15

あなたにオススメの質問