プロが教える店舗&オフィスのセキュリティ対策術

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をユニオンクエリでまとめ、ピボットを作って
みたのですが、差額の部分が出せず・・・
どうぞよろしくお願いします。

A 回答 (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.品番

ちょっと説明不足でしたね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/09/03 10:00

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

補足日時:2009/08/31 16:28
    • good
    • 0

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

この回答への補足

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

補足日時:2009/08/28 13:08
    • good
    • 0

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

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