- ベストアンサー
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
- ataata28
- お礼率66% (8/12)
- MySQL
- 回答数5
- ありがとう数4
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
select 在庫T.コード,個数,入庫,出庫 from 在庫T left join (select コード,sum(個数) as 入庫 from 入庫T where 日付 between '1/2' and '1/3' group by コード) as 入庫T2 on 在庫T.コード=入庫T2.コード left join (select コード,sum(個数) as 出庫 from 出庫T where 日付 between '1/2' and '1/3' group by コード) as 出庫T2 on 在庫T.コード=出庫T2.コード
その他の回答 (4)
- chukenkenkou
- ベストアンサー率43% (833/1926)
#4回答者さんへ 勘違いだったかも知れません。 マニュアルでは、確かに4.1で実装となっているようです。 失礼しました。
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
MySQLに、さほど詳しくないんですが・・ >バージョン5以降なら、サブクエリやビューなどが使用 >できますが、それより前なら使用できません。 バージョン4.1でサブクエリが実装されていると思うのですが?
- chukenkenkou
- ベストアンサー率43% (833/1926)
MySQLのバージョンは? バージョン5以降なら、サブクエリやビューなどが使用 できますが、それより前なら使用できません。 得られる結果が間違ってますよね? 1/2~1/3の結果なら、出庫は、bbbは2、cccは0ですよ? 在庫テーブルの個数が変わらないのも不思議です。 普通、商品マスタなどの商品コードと対応付けるように 思いますが? 簡略化のため、表名、列名をローマ字にしました。 日付はDATE型にしました。 LEFT JOINを使用のため、対応する行がないとNULLが 返るので、IFNULL関数で0にするようにしています。 SELECT ZAIKO.CODE,ZAIKO.KOSUU,IFNULL(X.NK,0),IFNULL(Y.SK,0) FROM ZAIKO LEFT JOIN(SELECT CODE,SUM(KOSUU) AS NK FROM NYUKO WHERE HIDUKE BETWEEN '2005-01-02' AND '2005-01-03' GROUP BY CODE) AS X ON ZAIKO.CODE=X.CODE LEFT JOIN(SELECT CODE,SUM(KOSUU) AS SK FROM SYUKKO WHERE HIDUKE BETWEEN '2005-01-02' AND '2005-01-03' GROUP BY CODE) AS Y ON ZAIKO.CODE=Y.CODE
お礼
chukenkenkouさん、ありがとうございます。 教えていただいたSQLでうまく行きました。 >MySQLのバージョンは? 記載するのをわすれました。5.0です。 今は4.0で運用しているのですがそろそろサブクエリが使えないバージョンでは限界が感じられたので5.0に替えようとしているところです。正式版も出たことですし。 >得られる結果が間違ってますよね? 間違っていました。すいません。 >在庫テーブルの個数が変わらないのも不思議です。 普通、商品マスタなどの商品コードと対応付けるように 思いますが? 記載している数は仮の数字です。実際にはこのような数にはなっていません。コードのところも商品マスタと紐付けされており商品名がでるようにしております。今回は分かりやすいように必要最低限のものだけにしておきました。
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
索引の持ち方やデータ量に対する対象の比率によっては、 結合するよりも、テーブルを統合する方が効率が良いことも あるので、色々試してみると良いかも知れません。 (サブクエリの使えるバージョンでないとダメですが・・) select コード,sum(個数),sum(入庫),sum(出庫) from ( select コード,個数,0 as 入庫,0 as 出庫 from 在庫テーブル union all select コード,0 as 個数,個数 as 入庫,0 as 出庫 from 入庫テーブル where 期間条件 union all select コード,0 as 個数,0 as 入庫,個数 as 出庫 from 出庫テーブル where 期間条件 ) group by コード
お礼
k_o_r_o_c_h_a_nさん、ありがとうございます。 試してみたのですが、エラーが発生してうまく行きませんでした(errcode 1248 Every derived table must have its own alias)。 そのまま記載されているSQLを実行したわけではないので私のやり方がまずかったのかしれません。もう少し調査したいと思います。 unionを使うという方法もあるのかとこれはこれで勉強になりました。
関連するQ&A
- SQLについて
SQLについてわからないのでご教授ください。 TABLE AAA コード 適用開始日 適用終了日 ------ ----------- ----------- aaa 20100101 99999999 bbb 20100101 20100531 bbb 20100601 99999999 ccc 20100101 20110711 ccc 20110712 99999999 TABLE BBB コード 適用開始日 適用終了日 ------ ----------- ----------- aaa 20100101 99999999 bbb 20100101 20100531 ccc 20100101 20110711 ・テーブルBBBの適用終了日が'99999999'のコードは テーブルAAAでは適用終了日が'99999999'の1レコードのみ。 ・テーブルBBBの適用終了日が'20100531'などの'99999999'以外は テーブルAAAでは適用終了日が'20100531'のレコードと、翌日'20100601'が適用開始日に設定され '99999999'が適用終了日に設定されたレコードの2レコードが存在。 上記2つが正常の状態です。 これらの条件に反する異常を検知するようなSQLを作りたいです。 たとえば、テーブルAAAのレコード[bbb 20100601 99999999]がない場合、 実行結果としてコード「bbb」が出力されるようなSQLが欲しいです。 異常がなければ、「なにも選択されませんでした。」でよいです。 条件として、 ・テーブルAAAでは「コード」「適用開始日」がPK ・テーブルAAAでは同じコードの「適用開始日」「適用終了日」の期間がかぶることはない ・テーブルAAAでは同じコードで3レコード以上は存在しない (たとえば20100101~20100531、20100601~20100931、20101001~20101231の3つの期間は存在しない) 実行結果はあくまで私の考えで、 異常を検知できればどのような形でも大丈夫です。 なにかあれば補足します。 どうぞよろしくお願い致します。
- 締切済み
- Oracle
- Accessで、在庫表を作りたいのですが・・・
いつも大変お世話になっております。m(_ _)m また質問させてください。 Accessで、在庫表を作っています。 「入庫情報_テーブル」と「出庫情報_テーブル」があり、それぞれのテーブルは、製品名(型番)と数量の情報を持っています。 入庫情報の数量はプラスして、出庫情報の数量はマイナスして、差引きの在庫表を作りたいのですが・・・ 入庫情報に入っている製品名のすべてを表示して、出庫情報の数量をマイナスする・・・というのは、「結合のプロパティ」で、入庫情報の全レコードと・・・というオプションを選べば可能です。 またその逆も可能なわけですが、両方を全部表示したい時はどうすればいいのでしょうか? つまり、入庫情報に入力されている商品で出庫情報にのっていないものと、出庫情報に入力されている商品で入庫情報にのっていないものがあるわけです。 在庫表では、それぞれのテーブルに存在するすべての製品名を載せ、型番が合致した場合は、入庫数量-出庫数量で在庫を出したいのです。 出庫情報にあって、入庫情報にないものというのは、つまり、在庫数がマイナスになるということです。 両方を同時に満たすには、どのようにすればいいのでしょうか? 質問の説明文が不足していたら指摘してください。 よろしくお願いします。
- 締切済み
- オフィス系ソフト
- Accessで在庫管理をする際の日付の扱いについて
いつも大変お世話になっております。m(_ _)m Accessで新規データベースを作成している最中です。 テーブルの作りを簡単に説明すると、 (1)「入庫受付」テーブルがあって、そこには、製品名・数量・入庫受付日等の情報が入っています。 (2)「出庫処理」テーブルがあって、そこにも、製品名・数量・出庫受付日等の情報が入っています。 この2つのテーブルを、期間を指定して、「在庫表」として出力する必要があります。 たとえば、当月のデータを見たい場合は、「10月度_在庫表」として、(1)の数量はプラス・(2)の数量はマイナスで、差引きの残(在庫数)を表示します。 このような目的でテーブルを作る場合に、ご相談なんですが、(1)(2)とも「日付」を入れるフィールドは「日付/時刻型」がいいのでしょうか? 期間を指定して数量を表示したい場合などは、この欄が「テキスト型」だとうまくいかないのでしょうか? なぜ、このような質問をするかというと、「日付/時刻型」にしておくと例えば「2006/10/30」という情報を入力したいときに、定型入力が使えませんよね?定型入力に「0000\/00\/00」と指定しておいて、日付は数字だけを入力すればいいようにしたいのですが、うまくいきません。 入力の簡単さを考えると「テキスト型」にしたいのですが、後々のことを考えると、たとえ入力が面倒でも「日付/時刻型」に設定しておくべきなのでしょうか? 回答をよろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- SQLの集計について教えてください。
環境はoracle9iです。 ■テーブルの構成 |年度|月|部署コード|商品コード|金額| ■テーブルの内容 |2010|01|AAA|001|1000| |2010|02|AAA|001|2000| |2010|01|AAA|001|3000| |2010|01|AAA|002|3000| |2010|02|BBB|003|4000| |2010|01|CCC|001|5000| |2010|03|CCC|001|6000| 上記のようなテーブルがあり、 これを年度,月,部署コード,商品コードでサマリした値を表示したいです。 と、ここまでなら上の4つでGROUP BYしてあげれば良いのですが、 そこに年度,部署コード,商品コードでサマリした 「累計金額」列を加える必要があります。(イメージは下記のとおりです。) ■抽出結果の構成 |年度|月|部署コード|商品コード|金額|累計金額| ■抽出結果の内容 |2010|01|AAA|001|4000|6000| |2010|02|AAA|001|2000|6000| |2010|02|BBB|003|4000|4000| |2010|01|CCC|001|5000|11000| |2010|03|CCC|001|6000|11000| GROUP BYと別の集計単位で列を作ることが可能か、 可能であればどのようなSQLを書くべきか、 というところを教えてください。
- ベストアンサー
- Oracle
- 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の初心者で申し訳ありませんがよろしくお願いします。
- 締切済み
- SQL Server
- access2000です。
こんばんは。 いつもお世話になります。 アクセスで困っております。教えてください。 テ-ブル1(原料マスター) コード 品名 100 A 200 B 300 C テーブル2(入出庫明細) 日付 コード 入庫 出庫 4/1 100 10 4/2 100 10 4/2 200 10 テーブル3(月初在庫) コード 在庫 100 10 200 100 300 50 クエリー1(入出庫の月合計) テーブル2より コード 入庫合計 出庫合計 100 10 10 200 10 クエリー2(在庫の算出) テーブル1の全コードを使用 コード 月初在庫 入庫合計 出庫合計 現在庫 100 10 10 10 10 200 100 10 300 50 となり、入庫や出庫にデータが入っていないコードのものは、現在庫が表示されません。入庫の合計は集計を合計としているだけです。現在庫はフィールドにビルドでテーブル1の月初在庫+入庫合計-出庫合計と入力しており、集計は演算としています。データの入っていないところを無視させて現在庫を全て表示させたいのです。 宜しくお願い致します。
- ベストアンサー
- オフィス系ソフト
- 分岐SQLを一発のSQLで実現したい
【データベース:SQLServer2005】 SQLのアドバイスを頂きたいです。 【テーブル】 テーブル名:Table1 フィールド名:種類、キー1、キー2 テーブル名:Table2 フィールド名:種類、キー1、キー2 テーブル名:Table3 フィールド名:種類、キー1、キー2 【データ】 Table1 種類、キー1、キー2 001 AAA BBB 001 AAA CCC 001 AAA DDD Table2 種類、キー1、キー2 002 AAA BBB 002 AAA CCC NULL AAA DDD Table3 種類、キー1、キー2 NULL AAA BBB NULL AAA CCC NULL AAA DDD これをUNIONで取得します。 種類、キー1、キー2 001 AAA BBB 001 AAA CCC 001 AAA DDD 002 AAA BBB 002 AAA CCC NULL AAA DDD NULL AAA BBB NULL AAA CCC 実現したいのは、 1)同種類、キー1、キー2のデータで、 種類にNULLが含まれていたら、NULLのデータは取得しない 2)同種類、キー1、キー2のデータで、 種類にNULLしかないデータは、取得する 001 AAA BBB 001 AAA CCC 001 AAA DDD 002 AAA BBB 002 AAA CCC NULL AAA DDD →いる NULL AAA BBB →いらない NULL AAA CCC →いらない ↓結果 001 AAA CCC 001 AAA DDD 002 AAA BBB 002 AAA CCC NULL AAA DDD 上記を実現する為、UNION後のSQLでも構わないので、 一発のSQLで取得する事は可能でしょうか? 有識者の方にご享受頂ければ幸いです。 どうぞ宜しくお願い申し上げます。
- ベストアンサー
- SQL Server
- Accessで倉庫管理
お世話になります。 現在Accessで在庫管理作成中です。 テーブル: 入庫:品番 品名 グループ 数量 使用者 日付 出庫:品番 品名 グループ 数量 使用者 使用状態 日付 グループ:1 消耗品 2 道具 3 機械 クエリ 消耗品在庫:入庫(消耗品)-出庫(消耗品) フォーム: 入庫フォーム、在庫フォームと出庫フォームを作成しました。 在庫フォームはクエリの元で作成しました。 以上のように作りました。 やりたいことは出庫フォームを入力する時、消耗品なら、数量を入力して、一旦在庫を確認して出したい数は在庫があれば、入力できます。そうではない場合はエラーでます。 言葉がうまく説明できないですのでイメージとしては Select Case グループID Case 1 If 数量<「在庫フォーム」の数量 Then そのまま入力出来ます。在庫が減って行きます。 Else エアー Message box”在庫は足りません” こんな感じでコードに書き換えられますか?コードが弱いですので助けて下さい。 よろしくお願いします。
- 締切済み
- その他(データベース)
- SQL 複数条件を設定
PostgreSQLを使用しております。 それぞれ、TABLE1とTABLE1があり、 TABLE1 a-1 a-2 b-1  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1 bbb aaa ddd 2 ggg bbb ccc 3 bbb mmm ddd 4 ggg mmm ccc : TABLE2 a-1 a-2 c-1  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1 bbb aaa eee 2 ggg mmm qqq : 質問1. TABLE1.a-1=TABLE2.a-1 and TABLE1.a-2=TABLE2.a-2 を条件にして結合 したい場合、どのように結合すればよいのか。 期待結果 a-1 a-2 b-1 c-1  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1 bbb aaa ddd eee 2 ggg bbb ccc ※ 3 bbb mmm ddd ※ 4 ggg aaa ccc qqq ※は空白でもNULLでもよい 質問2. 上記が可能な場合にさらに質問です。 TABLE1およびTABLE2が、SELECT,WHEREによって抽出されたものとした場合、 1つのSQL文で質問1と同様の出力にするにはどのように結合すればよいのか。(はたまた無謀なのか) 知識不足のため悩んでいる状況なので、 どなた様か知識がある方にご教授願いたく思います。
- ベストアンサー
- PostgreSQL
お礼
7marineさん、ありがとうございます。 このSQLで欲しいデータが取得できました。 もう少しサブクエリを勉強します。