電子書籍の厳選無料作品が豊富!

お世話になります。
下記テーブルを紐付けてクエリを作成します(Access2003)。

受注テーブル
 ・ID
 ・コード
 ・数量

検品テーブル
 ・ID
 ・コード
 ・検品フラグ

マスターテーブル
 ・ID
 ・コード
 ・印刷フラグ

検品テーブルのレコードは、受注テーブルの数量合計が展開されたレコード数となります。例えば、AAAというコードで数量合計が8の場合、検品テーブルではAAAのレコードが8レコード存在することになります。
但し、マスターテーブルの印刷フラグがYesとなっているものは、数量がいくつあっても受注テーブルは1レコード作成されます(数量合計で展開しない)。

 受注テーブル
  ID コード 数量
  1  AAA   5
  2  AAA   3
  3  BBB  100

 検品テーブル
  ID コード 検品フラグ
  1  AAA   Yes
  2  AAA   Yes
  3  AAA   Yes
  4  AAA   Yes
  5  AAA   Yes
  6  AAA   Yes
  7  AAA   No
  8  AAA   Yes
  9  BBB   Yes

 マスターテーブル
  ID コード 印刷フラグ
  1  AAA   No
  2  BBB   Yes

こんな感じです。

そこで各テーブルをコードで紐付けてグループ化し、検品フラグYesで抽出した状態で以下の結果を表示出来るようにしたいところです。
コード 数量合計
 AAA   7
 BBB  100

要するに印刷フラグがYesのものは受注テーブルの数量合計を表示し、それ以外は検品された数を表示させたいと考えています。
あらかじめ受注テーブルでコードでグループ化し、数量の合計を算出するクエリ(※1)を作成し、そのクエリと検品テーブル、マスターテーブルを紐付けたらうまく表示出来ました。
※数量合計はIIFで印刷フラグ=Yesの場合は※1の数量合計を、Yesではない場合は検品テーブルのレコードカウント数を表示。

しかし、できれば一つのクエリで上記の結果を表示させたいのですが、可能なのでしょうか。
ご教授お願い致します。

A 回答 (1件)

> できれば一つのクエリで上記の結果を表示させたいのですが


一つのクエリの定義が微妙なところですが、以下でどうでしょう?
※検品テーブルへのレコード展開はなされているものとしています。
※インデントのため全角スペースがあるので注意してください。
※表示順は、得られた[コード]の昇順にしています。

select t1.コード, t2.数量 as 数量合計
from マスターテーブル t1 inner join 受注テーブル t2 on t1.コード = t2.コード
where t1.印刷フラグ = 'YES'

union

select t3.コード, count(*) as 数量合計
from 検品テーブル t3
where t3.コード in
(select t4.コード from マスターテーブル t4
 where t4.印刷フラグ = 'NO')
group by t3.コード
order by 1
;
    • good
    • 0

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