Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2013)
該当がない年月の場合も、最大の数量を取得する方法
投稿日時: 17/05/30 11:17:43
投稿者: hato

お世話になります。
月末の在庫数を管理しているテーブルがあります。
期間を指定して、月の該当がなければその月より前の
最大の年月の在庫数量をとってきたいです。
 
●月末在庫テーブル
商品CD        年月    在庫数量
001        201705        78
001        201704        100
001        201703        50
001        201701        58
002        201612        50
003        201704        30
003        201703        25
 
●期間
201703〜201705を指定
 
●出したい結果
商品CD        年月        在庫数量
001        201703        50
001        201704        100
001        201705        78
002        201703        50
002        201704        50
002        201705        50
003        201703        25
003        201704        30
003        201705        30
 
年月がない場合も、指定した期間の分の最大数量を
取り出すところがどうしてもできません。
何かヒントでも結構ですので、教えていただけませんか?
よろしくお願いします。

回答
投稿日時: 17/05/30 14:41:08
投稿者: sk

引用:
期間を指定して、月の該当がなければその月より前の
最大の年月の在庫数量をとってきたいです。

引用:
●期間
201703201705を指定

・上記の条件([年月]の範囲の開始値と終了値)はそれぞれ固定値なのか。
 それとも、「現在のシステム日付の月を含む過去 3 ヶ月」
 という条件を設定しようしているのか。
 それとも、フォーム上の非連結テキストボックス等により
 ユーザーに任意の範囲条件(開始値と終了値)を入力させることを
 前提としているのか。
 
・仮にユーザーに範囲条件を入力させる場合、
 その範囲の月数が一定ではなかったり、
 一方に未来の年月( 201706 等)を入力されたりする
 ケースが予想されるが、それについては
 どのように考えているのか。
 
引用:
●出したい結果
商品CD        年月        在庫数量
001        201703        50
001        201704        100
001        201705        78
002        201703        50
002        201704        50
002        201705        50
003        201703        25
003        201704        30
003        201705        30 

[商品CD]グループ 1 つ当たりのレコード件数が
入力された範囲条件(の月数)によって
毎回変動するのであれば、クエリのみでは
充分に対応出来ない可能性が残ります。

投稿日時: 17/05/30 15:44:38
投稿者: hato

skさん、コメントありがとうございます!!
 

引用:
・上記の条件([年月]の範囲の開始値と終了値)はそれぞれ固定値なのか。
 それとも、「現在のシステム日付の月を含む過去 3 ヶ月」
 という条件を設定しようしているのか。
 それとも、フォーム上の非連結テキストボックス等により
 ユーザーに任意の範囲条件(開始値と終了値)を入力させることを
 前提としているのか。

・期間はフォーム上の非連結テキストボックスから開始月と終了月を
入力してもらう形を想定しています。
 
引用:
・仮にユーザーに範囲条件を入力させる場合、
 その範囲の月数が一定ではなかったり、
 一方に未来の年月( 201706 等)を入力されたりする
 ケースが予想されるが、それについては
 どのように考えているのか。

・範囲の月数は一定ではなく、年度の始まりの4月から現在のシステム日付の月
までを多く入力することを想定していますが、固定ではありません。
この在庫数と後からSQLで結合しようとしている、出荷データの年月がシステム日付の
月までしかないので、もし終了月に201706など未来の年月が入力されても、
在庫数の一覧は、システム日付の月までが必要と考えています。
 
クエリのみでは厳しそうということは、テーブル作成で各月のぬけのない
在庫データを作るイメージでしょうか?
 
説明がうまくできていなくて申し訳ありませんでした。
またアイデアがあればよろしくお願いします。

回答
投稿日時: 17/05/30 15:51:29
投稿者: AccessKid

考え方だけ。
 
1.テーブルを作る(T_tmp)
  フィールド名:tmp
   データ型:月末在庫の年月と同じ
   データ :201601〜201712
 
2.クエリを作る。(Q_tmp)
 SELECT tmp
      , 商品CD
   FROM T_tmp
      , 月末在庫
 GROUP BY tmp
        , 商品CD;
 
3.表示用クエリを作る
 
SELECT Q_tmp.tmp AS 在庫年月
     , Q_tmp.商品CD, IIf(IsNull(在庫数量)
                         , (SELECT T.在庫数量
                              FROM 月末在庫 AS T
                             WHERE T.商品CD = Q_tmp.商品CD AND T.年月=DMax("年月"
                                                                          ,"月末在庫"
                                                                          ,"商品CD='" & Q_tmp.商品CD & "'"))
                         ,月末在庫.在庫数量) AS 月末在庫数量
  FROM Q_tmp LEFT JOIN 月末在庫 ON (Q_tmp.商品CD = 月末在庫.商品CD) AND (Q_tmp.tmp = 月末在庫.年月)
 WHERE Q_tmp.tmp Between 201703 And 201705;

投稿日時: 17/05/31 08:49:57
投稿者: hato

AccessKid さん、アドバイスありがとうございます。
 
教えていただいたやり方で、出したい結果をうまく出すことができました。
本当にありがとうございます。
 
skさん、AccessKid さん
どうもありがとうございました!