• 締切済み

SQL文で在庫推移を得る。

初期在庫数と入庫数と出庫数で現在の在庫数を得るSQL文を作りたいです。例としては下記のような感じです。 単純なようですが、以外と難しく、すでに作成されていれば教えて頂きたいと思います。ヒントになることでも構いません。 ここでは在庫と言っておりますが、キャッシュフロー全てに通用すると思います。ご興味のある方、挑戦してみてはいかがでしょう。 P.S.昨日SQL文の質問をさせて頂きました。今日もSQLで悩んでおります。 例: 日付|初期在庫|入庫|出庫|在庫 1/1 |10   |  |  |10 1/2 |    |3  |  |13 1/3 |    |6  |3  |16 1/4 |    |9  |10 |15 1/5 |    |1  |  |16 1/6 |    |  |10 |6 1/7 |    |  |1  |5

みんなの回答

  • jmh
  • ベストアンサー率23% (71/304)
回答No.3

ご質問を、例えば次のように書き換えることは可能でしょうか? >>> 次のような2つの表SとTがあります。ココから、各日付の最終の在庫数のリストRを、単一のSQLで取り出すことはできますか?ただし、初期在庫は固定値2です。 表T:    表S: 日付|入庫 日付|出庫 --+-- --+-- 11|12 12|11 13|14 13|15 13|11 14|11 結果R: 日付|在庫 --+-- 11|14 12| 3 13|13 14| 2 アクセス98です。 <<< つまり、どのような表(とそれらの関係)から、そのような結果を得たいのかが分からないので、補足要求しました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

<AccessVBAなどなら簡単。SQLでは難しい処理もある> 私はSQLの勉強が充分ではないのですが、出会って以来長いのと、日頃 考えていることを混ぜて、独断と偏見で意見を述べます。むしろ私の下記文章に専門家のコメントが欲しいくらいです。何か得るところあれば、幸です。子供の質問が案外答えるのに難しいように、私が色々なことを習い始めた時に、こんなことは良くあるケース、出来る方法があって当たり前、と思う場面が多々ありました。しかし低レベルから進歩するコンピュターソフトは、なかなかそこまで進歩してないことが多いし、方法があっても、学習が相当進んで初めて、その方法が使えることを学ぶと言うケースが多いです。 この問題もそれらに似ているのだと思います。もう少し勉強されてから考えられてはと思います。 と言うのはSQLは74年ごろIBMで生まれて、’80年代まではIBM(大型機が多い)のユーザーに使われ、SQLのQがクエリのQであることから判るように、問合せ条件検索用であり、テーブル-->テーブルの写像であり、テーブル->レコードではなかったと思います。また作る側のプログラム言語と言うより、使う側に易しい操作言語として作られたようです(QBE)。結果は1操作でテーブルの形しか出て来ません。結果は見る・印刷するだけで、次ぎの処理のプログラムへ渡したくても、そこへ行けなかった。基礎にあるリレーショナルデータベース(DB2)にしても、大型システムでないとレスポンス時間が長く、使えないと聞いたことがありました。 一方、トランザクション処理の典型が在庫管理で、入出庫のたびに、SQL文とデータを入れるような処理形態は不便で、流行りません。在庫照会には適していますが。SQLを使わずに別言語(IMSなど)などでシステムが組まれていました。在庫管理者の部門の端末で、入出庫データを入れるものの、SQL文が使われていたとは言えないのです。 しかしSQL自身には良い面が多く、その後オフコン・パソコンの高機能化・普及に伴い、オラクルをはじめ、IBMもIBM以外も、新ニーズを取りこんだ改良・SQLの処理系を出してきて、色々な機能を追加し始めました。カーソル(マウスカーソルとは全く別)処理などです。検索結果を次ぎの処理に、1レコードずつ処理出来る仕組みなどです。動的SQLと言うのもあります。この辺は、処理系ごとに、出来たり出来なかったり、差が大きく出てきますので、マニュアルを読んで勉強する分野で、一般のSQL解説書には書きにくい部分です。 その後SQLの標準化の面でも機能が取りこまれています。 アクセスVBAのように、SQLを取りこんで、全体として便利になっている言語もあります。オラクルもそうでしょう。 在庫管理をするときにはマスター(現在=最終在庫数を持つ)と出庫・入庫 の記録・データであるトランザクションとは、テーブルを分けて持つ例が 多いと思います。 さて質問の例ですが、マスターデータとトランザクションデータが同じテーブル内に一緒になっています。そのため初等SQLでの回答が難しくなります。自分で問題を作ったのですか、本に載っていましたか。こう言う例はあまりないと思いますが。 学習が進んで将来、マスターテーブル(M)と入出庫テーブル(T)が別にあって、TでMを更新(=最終在庫数を書きかえる)するやり方を「SQLで」行う方法などを勉強してください。その時#1のご回答の式を当然使います。 UPDATE(更新)というのがありますが、標準では他のレコードのフィールドデータで(足し引きなどして)書きかえるようにはなっていません。 その外に、オンライン的に使うには、入出庫データが入ってきたとき、即座にSQL文が走る仕組みがある必要があります。普通の教科書的な本はそこまで述べていません。 http://www.rfs.jp/sitebuilder/sql/01/02.html >ご興味のある方、挑戦してみてはいかがでしょう。 OKWEBは学校の先生が出す問題コーナーやクイズではないので、知ってて時間のある人は答えるでしょうし、挑戦する人はするでしょう。知っている人が答える建前なので、余分な気がします。

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

何を求めたいのか よくわからないのですが・・・。 ある時点までの在庫は、初期在庫+SUM(入庫)-SUM(出庫) となると思います。 この在庫を更新したいのかな?

関連するQ&A

  • SQL文がわからない

    在庫テーブル・入庫テーブル・出庫テーブルがあります。 指定期間内の入庫テーブル・出庫テーブルの数量と在庫テーブルを結合させたいが、どうすればいいでしょうか? 2日ほど悩みましたがどうしても分かりませんでした。 よろしくお願いします <在庫テーブル> コード 個数 aaa   10 bbb   10 ccc   10 <入庫テーブル> コード 個数 日付 aaa   1  1/1 aaa   1  1/2 bbb   1  1/2 aaa   1  1/3 aaa   1  1/4 bbb   1  1/4 ccc   1  1/5 <出庫テーブル> コード 個数 日付 bbb   2  1/2 aaa   2  1/3 bbb   2  1/4 ccc   2  1/4 aaa   2  1/5 <結果(1/2~1/3)> コード 個数 入庫 出庫 aaa   10   2   2 bbb   10   1   4 ccc   10   0   2

    • ベストアンサー
    • MySQL
  • アクセスでの在庫管理(在庫期間が知りたい)

    アクセスを使って商品の在庫管理を行おうと試行錯誤しています。 1.入庫テーブル(商品名、入庫日、入庫数)に入力。 2.出庫テーブル(商品名、出庫日、出庫数)に入力。  これらから、商品と入庫日をロット単位とし、このように在庫を計算しています。  入庫の合計―出庫の合計=在庫 ここからネックになっているのが、在庫期間をどうあらわすかと言う点です。  通常、今日までの在庫期間は   在庫期間=今日―入庫日  によって表しています。  ここまでは出来ていますが、さらに一歩進めて  日にちを毎回指定し   指定日からの在庫期間=指定日―入庫日  のような感じで在庫期間を表示させたいのですが どのようにクエリを作ったらよいのでしょうか? このようなフローで良いのか、 参考HP等ありましたらアドバイス頂けませんか?

  • 在庫数の取得

    T_zaikoというテーブルに 日付    品名  品番 入庫 出庫 在庫数  2006/08/01 りんご 0001  3     3   2006/08/01 りんご 0001     1  2   2006/08/01 りんご 0002  8   2  6 2006/08/02 りんご 0001  棚卸    6 2006/08/03 りんご 0002  棚卸    8 があります。 これを品番は関係なしで在庫数を求めたいのですが どうすればいいのでしょうか? 日付    品名   入庫 出庫 在庫数  2006/08/01 りんご   3     3   2006/08/01 りんご      1  2   2006/08/01 りんご   8   2  8 2006/08/02 りんご   棚卸    12 2006/08/03 りんご   棚卸    14 というようにしたいのです。 上から順に入庫のときは足して出庫のときは引いていくと棚卸のときがおかしくなります。 どうすればいいのでしょうか? activereportへ出力したいのです。 よろしくお願いします。

  • SQLを教えてください

    SQLを教えてください 環境:SQLServer2000 下記のようなテーブルがあります。 商品    日付    入庫    出庫 Shouhin  Hiduke    In     Out ------------------------------------------  A    02/01    100         A    02/02           30  A    02/03    40           求めたい結果は以下のとおりで在庫になる残数を求めたいのです。 商品    日付    入庫    出庫   残数 Shouhin  Hiduke    In     Out   Zan --------------------------------------------------  A    02/01    100         100  A    02/02           30   70  A    02/03    40          110 SQLの初心者で申し訳ありませんがよろしくお願いします。

  • 現在庫算出方法についてお教え下さい

    在庫管理についてお教え下さい 私の行なっている現在庫の算出方法が妥当かどうか御教え頂けないでしょうか? 在庫管理を会社で行なっています。小さい会社なので、商品もそれほどあるわけではありません。 入庫したら以下の方法で入庫処理しています。 ハンディターミナルで商品のバーコードをスキャンし、個数を入力。PCに転送しMYSQL5で管理。 テーブルは、 T_入庫マスター 商品コード,入庫数 出庫したら以下の方法で出庫処理しています。 ハンディーターミナルで商品のバーコードをスキャンし、個数を入力。PCに転送しMYSQLで管理。 テーブルは、 T_出庫マスター 商品コード,出庫数 さらにビューを2つ作っています。 V_入庫マスター select 商品コード,sum(入庫数) As 入庫数 from T_入庫マスター group by 商品コード V_出庫マスター select 商品コード,sum(出庫数) As 出庫数 from T_出庫マスター group by 商品コード 現在庫を求めるには、全ての入庫から全ての出庫を引いたものが現在庫になるはずなので、もう一つビューを作ります。 V_現在庫マスター select V_入庫マスター.商品コード,V_入庫マスター.入庫数 - V_出庫マスター.出庫数 As 現在庫 from V_入庫マスター inner join V_入庫マスター.商品コード = V_出庫マスター.商品コード まだ作り始めて間もないのですが(今まではExcelで在庫管理してました)、果たして現在を求めるのにこのようなやりかたで良いのかどうか不安になりました。 このやり方がスマートかどうか教えて頂けませんでしょうか? 毎日の入出庫は、取扱点数50点。入庫、出庫はマチマチですが各商品10前後です。 よろしくお願いいたします。

  • Accessで、在庫表を作りたいのですが・・・

    いつも大変お世話になっております。m(_ _)m また質問させてください。 Accessで、在庫表を作っています。 「入庫情報_テーブル」と「出庫情報_テーブル」があり、それぞれのテーブルは、製品名(型番)と数量の情報を持っています。 入庫情報の数量はプラスして、出庫情報の数量はマイナスして、差引きの在庫表を作りたいのですが・・・ 入庫情報に入っている製品名のすべてを表示して、出庫情報の数量をマイナスする・・・というのは、「結合のプロパティ」で、入庫情報の全レコードと・・・というオプションを選べば可能です。 またその逆も可能なわけですが、両方を全部表示したい時はどうすればいいのでしょうか? つまり、入庫情報に入力されている商品で出庫情報にのっていないものと、出庫情報に入力されている商品で入庫情報にのっていないものがあるわけです。 在庫表では、それぞれのテーブルに存在するすべての製品名を載せ、型番が合致した場合は、入庫数量-出庫数量で在庫を出したいのです。 出庫情報にあって、入庫情報にないものというのは、つまり、在庫数がマイナスになるということです。 両方を同時に満たすには、どのようにすればいいのでしょうか? 質問の説明文が不足していたら指摘してください。 よろしくお願いします。

  • access クエリにて在庫数を出したい

    お世話になります。 accessにて在庫管理DBを構築しています。 在庫数を出そうとすると、「あいまいな外部結合が含まれているので、SQLステートメントを実行できません。 いずれかの結合を最初に実行するために、第1次結合を実行する分割クエリを作成し、 SQLステートメントにそのクエリを含めてください。」とエラーが出てしまいます。 なにぶん初心者の為、ちんぷんかんぷんです。 ご教授の程よろしくお願い致します。 t_薬剤マスター 薬剤区分ID、薬剤名、包装内容、包装量、単位、薬価 t_店舗 店舗ID、店舗名 q_入庫数の合計 店舗ID、店舗名、薬剤ID、薬剤名、入庫数の合計、小分入庫数の合計、入庫総合計 q_出庫 店舗ID、店舗名、薬剤ID、薬剤名、出庫数の合計 q_在庫 在庫ID、店舗ID、店舗名、薬剤ID、薬剤名、在庫数 とあります。 t_薬剤マスターとt_店舗から、 それぞれのクエリ、(q_入庫、q_出庫、q_在庫)に 「't_薬剤マスター'の全レコードと'q_入庫'の同じ結合フィールドのレコードだけを 含める。」結合を設定しました。 そして下記の様にクエリを作成 フィールド 店舗ID  店舗名    薬剤ID       薬剤名 ____________________________ テーブル t_店舗  t_店舗     t_薬剤マスター  t_薬剤マスター フィールド 在庫数   入庫総合計     出庫数の合計       ____________________________ テーブル q_在庫マスター q_入庫数総合計  q_出庫数合計        フィールド  在庫数: [在庫数]+[入庫総合計]-[出庫数の合計]    ____________________________ テーブル  と作成しました。。。。が実行するとエラーメッセージが出てきてしまいます。 これは結合が悪いと言う事でしょうか? よろしくお願い致しますm(__)m

  • activereportの計算式

    VB6.0でactivereportを使っています。 日付    品名  品番 入庫 出庫 在庫数  2006/08/01 りんご 0001  3     3   2006/08/01 りんご 0001     1  2   2006/08/01 りんご 0002  8   2  6 というように今在庫テーブルには品番ごとの在庫数が入っています。 それをactivereportへ出力するときに 品番を無視して在庫数を計算したいのですが どうすればいいのでしょうか? 日付    品名  品番 入庫 出庫 在庫数  2006/08/01 りんご 0001  3     3   2006/08/01 りんご 0001     1  2   2006/08/01 りんご 0002  8   2  8 というようにしたいのです。 前日の実在個数+入庫-出庫という方法を考えています どこをどのようにしたらいいのかがわかりません。 教えてください。 よろしくお願いします。

  • SQL文に関するとある問題について

    SQL文に関するとある問題について (3) 次の出庫記録の表に対して、以下のSQL文を実行したときに得られる値が 最も大きな数が得られるものは何ですか? 該当する記号を書いてください。 --------------------------------------------------------------- 商品番号 数量 日付 PRT145 4 20090610 DP255 2 20090610 DP266 3 20090611 PRT255 2 20090611 a SELECT MAX(数量) FROM 出庫記録 b SELECT AVG(数量) FROM 出庫記録 WHERE 日付='20090610' c SELECT COUNT(*) FROM 出庫記録 d SELECT SUM(数量) FROM 出庫記録 WHERE 日付='20090611' ------------------------------------------------------------ この場合、それぞれの選択肢が出す数字は a=1 b=3 c=4 d=5 なので、正解はdでいいんでしょうか? aのMAXって、最大なのはPRT145の数量4ですが、a=に4をいれるべきか、それともMAXなのはPRT145一つだけなので1にすべきか、まずそこで躓きました。 bのAVGは4+2=6なので、それの半分の3かな? cはそのまんま4にして dはSUMなんで、3+2=5.にしちゃいましたが、間違ってるでしょうか?   宜しくお願い致します。

  • 在庫数を表示させたい

    アクセスの超初心者なのです。 今、簡単な在庫管理をしようとしてるのですが、フォームで入出庫数を入力すると下のほうに在庫数を表示させたいのです。 例えば「A-1」の在庫が10個合ったとします。A-1はコンボボックスを使いたいです。 10個のうち5個出庫したとすると下のように在庫数の欄が5個と表示させたいです。説明が下手ですみません(ーー;) カタログ番号  A-1 入庫数 出庫数   5   在庫数   5