Access (VBA)

Access VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 7 Professional : Access 2016)
複雑なクエリの集計方法
投稿日時: 17/08/08 17:07:20
投稿者: ぽろんちょ

いつも大変お世話になります。
 
現在、出荷数量に対してどの製造ロットの在庫をいくつ使用するのかがわかるクエリを作成
しようと考えているのですが、うまくできずに悩んでいます。
 
最終的には下記のようにアウトプットしたいのですが、
まず品目コードごとに製造ロットの昇順で並び替えをし、早い方の製造ロットから出荷数量合計分の
在庫を出庫していくようになります。早い製造ロットの在庫で足りない場合は、次の製造ロットから
出庫するようになります。
そこで出荷数量フィールドの計算なのですが、例えば品目コードAAAAAの出荷数量合計が88だった
場合に201705ロットの製品11は全て出庫され、次の製造ロットの分から残りの77を出庫する...と
いった感じを出荷数量フィールドに表示したいのですが、なかなかうまくできません。
 
品目コード 製造ロット 在庫 出荷数量 出荷数量合計
AAAAA     201705   11    11     88
 AAAAA    201706   400   77     88
 BBBBB     201706   312  312    577
 BBBBB    201707   400   265    577
 CCCCC    201706   161   161    224
 CCCCC    201707   160   63     224
 
使用しているのは下記の二つのテーブルです。
 
『T出荷データ』テーブル
・品目コード
・出荷数量合計
 
『T棚卸し』テーブル
・品目コード
・製造ロット
・在庫数量
 
どなたかおわかりになる方、教えて頂けると大変助かります。
宜しくお願いいたします。

回答
投稿日時: 17/08/10 15:57:08
投稿者: Suzu

こんにちは。
 
VBAの板という事はVBAを使用して良いのでしょうか?
 
(個人的には、1本のクエリで求める結果を得るクエリができなそうな時には
  ワークテーブルを使う事が多いので、VBAも積極的に使います
  今回の様に、サブクエリを使用した結果から、さらに計算が必要な様な場合
  クエリのみにて実施すると、処理に時間が掛かる事が多いですから)
 
テーブル T棚卸し、出荷データ のレコードが具体的にどうなっているのかも判らず
出荷データに AAAAA、201707 のデータがある事があり得るならとか考えると。。
更に抽出条件が必要になる事は容易に推察ができ、質問文には現れていない条件が他にもありそうですので。。
 
 
とりあえずヒントとして・・
サブクエリを使って 品目コード毎に、製造ロッド順に並べた時の累計在庫数を求める事が可能。
 
SELECT
  T棚卸し.品目コード,
  T棚卸し.製造ロッド,
  T棚卸し.在庫数量,
  出荷データ.出荷数量合計,
  (
    SELECT SUM(在庫数量) AS Exp1
    FROM T棚卸し AS TT
    WHERE
      (TT.品目コード = T棚卸し.品目コード)
      AND
      (TT.製造ロッド <= T棚卸し.製造ロッド)
  ) AS 累計在庫数
FROM T棚卸し INNER JOIN 出荷データ ON T棚卸し.品目コード = 出荷データ.品目コード
ORDER BY T棚卸し.品目コード, T棚卸し.製造ロッド;
 
あとは、その累計在庫数から出荷数量合計数を引きます。
その数が 負になる場合は「0」を表示させ、正になる場合はその正の数を表示。
 
条件分岐には、IIF関数を使います。
 
基本的には上記の考え方です。

投稿日時: 17/08/14 11:04:08
投稿者: ぽろんちょ

Suzu様
 
早速のご返信有難うございます!
 
現在お盆休みのため検証できないので、休み明けに検証してみます!

トピックに返信