- 締切済み
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
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- jmh
- ベストアンサー率23% (71/304)
ご質問を、例えば次のように書き換えることは可能でしょうか? >>> 次のような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/17069)
<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)
何を求めたいのか よくわからないのですが・・・。 ある時点までの在庫は、初期在庫+SUM(入庫)-SUM(出庫) となると思います。 この在庫を更新したいのかな?