Access (一般機能)

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

 
(Windows 10 Pro : Access 2013)
割り算した結果をレコード化したいです^^;
投稿日時: 19/06/18 19:37:37
投稿者: ぷてら

どなたか教えて下さい^^;
 
製品コード 数量
-----------------
ABC    101
-----------------
 
例えば上記のテーブルのデータを20で割り算して・・・
 
製品コード 数量
-----------------
ABC    20
ABC    20
ABC    20
ABC    20
ABC    20
ABC     1
-----------------
 
と余りを含んだ6レコードにするクエリの作り方を教えて下さいm(_ _)m
 
宜しくお願い致します。
 

回答
投稿日時: 19/06/18 20:50:51
投稿者: mayu.

引用:
余りを含んだ6レコードにするクエリの作り方を教えて下さい

サンプルを載せておきます。
 
■ テーブル定義
CREATE TABLE T_num ( num INT PRIMARY KEY ) ;

CREATE TABLE T_order
(
      注文ID     AUTOINCREMENT NOT NULL PRIMARY KEY
    , 製品コード VARCHAR( 30 ) NOT NULL
    , 受注数量   INT           NOT NULL
    , 入数       INT           NOT NULL
) ;

■データ例
 < T_num >            < T_order >

  num        注文ID | 製品コード | 受注数量 | 入数 |
 ---------     -------------------------------------------------
  1          1     ABC       101    20
  2          2     DEF      1,123    300
  3          3     XYZ       50    15
  .
  .
  19
  20
※ num には 1 〜 想定されるレコード数の最大値まで連番を入力します。
  必要な分しか使いませんので、多少大き目の数値を格納しておくといいでしょう。
 
■ SQL
-----------------------------------------------------------------
SELECT x.注文ID 
     , x.製品コード 
     , x.受注数量 
     , Switch( y.num <= Int( x.受注数量 / x.入数 ), x.入数 
             , 
               True, x.受注数量 - x.入数 * ( y.num - 1 ) 
       ) As 入数 
     , y.num & '/' & -Int( - x.受注数量 / x.入数 ) As ラベル 
FROM T_order x
   , T_num   y
WHERE y.num <= -Int( - x.受注数量 / x.入数 )
ORDER BY x.注文ID 
       , x.製品コード 
       , y.num ;

■ 結果
 注文ID  製品コード  受注数量  入数  ラベル
-----------------------------------------------------
  1     ABC     101    20   1/6
  1     ABC     101    20   2/6
  1     ABC     101    20   3/6
  1     ABC     101    20   4/6
  1     ABC     101    20   5/6
  1     ABC     101     1   6/6
  2     DEF    1,123    300   1/4
  2     DEF    1,123    300   2/4
  2     DEF    1,123    300   3/4
  2     DEF    1,123    223   4/4
  3     XYZ      50    15   1/4
  3     XYZ      50    15   2/4
  3     XYZ      50    15   3/4
  3     XYZ      50     5   4/4

投稿日時: 19/06/19 18:09:59
投稿者: ぷてら

まずは、mayu様、早速の御教授有難う御座いますm(_ _)m
 
 
私の質問の言葉が足りなかった様なので、補足致します^^;
 
●マスターテーブル
 
製品コード 数量
-----------------
ABC    20
DEF    15
 
●受注テーブル
-----------------
製品コード  数量
ABC    101
DEF     88
 
上記の様なふたつのテーブルがあります。
 
受注テーブルの数量をマスターテーブルの数量で割り算した結果(余りを含む)
のクエリを作成したいのです^^;
 
●生産指示クエリ
 
製品コード 数量
ABC    20
ABC    20
ABC    20
ABC    20
ABC    20
ABC     1
DEF    15
DEF    15
DEF    15
DEF    15
DEF    15
DEF    13
 
無知なもので・・・^^;
 
申し訳ありませんが御指導宜しくお願い致しますm(_ _)m
 
 

ぷてら さんの引用:
どなたか教えて下さい^^;
 
製品コード 数量
-----------------
ABC    101
-----------------
 
例えば上記のテーブルのデータを20で割り算して・・・
 
製品コード 数量
-----------------
ABC    20
ABC    20
ABC    20
ABC    20
ABC    20
ABC     1
-----------------
 
と余りを含んだ6レコードにするクエリの作り方を教えて下さいm(_ _)m
 
宜しくお願い致します。
 

回答
投稿日時: 19/06/19 19:06:00
投稿者: mayu.

引用:
●生産指示クエリ

以下の SQL で、ご希望の結果になるでしょう。
( 2019/06/18 20:50:51 の回答で定義した T_num テーブルは必要です )
 
SELECT y.製品コード
     , Switch( z.num <= Int( y.数量 / x.数量 ), x.数量 
             , 
               True, y.数量 - x.数量 * ( z.num - 1 ) 
       ) As 数量 
FROM マスターテーブル x
   , 受注テーブル     y
   , T_num            z
WHERE x.製品コード = y.製品コード
  AND z.num <= -Int( - y.数量 / x.数量 )
ORDER BY y.製品コード 
       , z.num ;

投稿日時: 19/06/21 10:48:13
投稿者: ぷてら

mayu様
 
ご指導有り難う御座いますm(_ _)m
 
ご指導の通りSQLを実行してみたのですが…
 
最初のSwitchの部分でコンパイルエラーに
なります(^_^;)
 
色々考えてみたのですが対処方法があれば
ご指導をお願いいたしますm(_ _)m
 

mayu. さんの引用:
引用:
●生産指示クエリ

以下の SQL で、ご希望の結果になるでしょう。
( 2019/06/18 20:50:51 の回答で定義した T_num テーブルは必要です )
 
SELECT y.製品コード
     , Switch( z.num <= Int( y.数量 / x.数量 ), x.数量 
             , 
               True, y.数量 - x.数量 * ( z.num - 1 ) 
       ) As 数量 
FROM マスターテーブル x
   , 受注テーブル     y
   , T_num            z
WHERE x.製品コード = y.製品コード
  AND z.num <= -Int( - y.数量 / x.数量 )
ORDER BY y.製品コード 
       , z.num ;

回答
投稿日時: 19/06/21 11:24:11
投稿者: mayu.

引用:
最初のSwitchの部分でコンパイルエラーに
なります(^_^;)

クエリの作り方・実行方法は一般機能になりますので、VBAは一切関係ありません。
 
SQLを入力してクエリを実行する方法は
https://accessvba.blog.so-net.ne.jp/2013-11-11
あたりをご覧いただくとよろしいでしょう。

投稿日時: 19/06/22 06:38:38
投稿者: ぷてら

mayu様
 
お返事遅くなりましたm(_ _)m
 
ご指導有難う御座います。もう少し勉強してみます。
 

mayu. さんの引用:
引用:
最初のSwitchの部分でコンパイルエラーに
なります(^_^;)

クエリの作り方・実行方法は一般機能になりますので、VBAは一切関係ありません。
 
SQLを入力してクエリを実行する方法は
https://accessvba.blog.so-net.ne.jp/2013-11-11
あたりをご覧いただくとよろしいでしょう。

投稿日時: 19/07/09 01:18:16
投稿者: ぷてら

有難うございましたm(_ _)m