- 締切済み
Access2003 一つのクエリで結果を出したい
お世話になります。 下記テーブルを紐付けてクエリを作成します(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ではない場合は検品テーブルのレコードカウント数を表示。 しかし、できれば一つのクエリで上記の結果を表示させたいのですが、可能なのでしょうか。 ご教授お願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- bin-chan
- ベストアンサー率33% (1403/4213)
> できれば一つのクエリで上記の結果を表示させたいのですが 一つのクエリの定義が微妙なところですが、以下でどうでしょう? ※検品テーブルへのレコード展開はなされているものとしています。 ※インデントのため全角スペースがあるので注意してください。 ※表示順は、得られた[コード]の昇順にしています。 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 ;