dポイントプレゼントキャンペーン実施中!

初期在庫数と入庫数と出庫数で現在の在庫数を得る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

A 回答 (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です。
<<<

つまり、どのような表(とそれらの関係)から、そのような結果を得たいのかが分からないので、補足要求しました。
    • good
    • 0

<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は学校の先生が出す問題コーナーやクイズではないので、知ってて時間のある人は答えるでしょうし、挑戦する人はするでしょう。知っている人が答える建前なので、余分な気がします。
    • good
    • 0

何を求めたいのか よくわからないのですが・・・。


ある時点までの在庫は、初期在庫+SUM(入庫)-SUM(出庫)
となると思います。
この在庫を更新したいのかな?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!