- 締切済み
SQLで必要なデータを取り出したい
SQLにて以下のテーブルから必要なデータを取り出したいと思っています。 【支店テーブル:officetbl】 officenumber,officename(支店No,支店名) 001,東京支店 002,大阪支店 【取引先テーブル:partnertbl】 partnernumber,partnername(取引先No,取引先名) P001,A株式会社 P002,B有限会社 【工具テーブル:tooltbl】 partnernumber,toolnumber,toolname(取引先No,工具No,工具名) P001,T00001,工具A P001,T00002,工具B P002,T00003,工具C 【入荷(在庫)テーブル:arrivaltbl】 officenumber,partnernumber,toolnumber,arrival,stock(支店No,取引先No,工具No,入荷日,在庫) 001,P001,T00001,20150101,0 001,P001,T00001,20150110,2 001,P001,T00001,20150115,4 001,P002,T00003,20150120,2 001,P002,T00003,20150125,1 002,P002,T00003,20150105,2 これらのテーブルから、全拠点の場合と東京支店のみの場合、 2つのパターンでデータを取り出したいのですが、 どうSQLを組めば実現できるか分かりません。 【抽出後の結果(1):全拠点の場合】 officename,partnername,toolnumber,toolname,stock(支店名,取引先名,工具No,工具名,在庫) 東京支店,A株式会社,T00001,工具A,6 東京支店,A株式会社,T00002,工具B,0 東京支店,B有限会社,T00003,工具C,3 大阪支店,A株式会社,T00001,工具A,0 大阪支店,A株式会社,T00002,工具B,0 大阪支店,B有限会社,T00003,工具C,2 【抽出後の結果(2):東京支店のみの場合】 officename,partnername,toolnumber,toolname,stock(支店名,取引先名,工具No,工具名,在庫) 東京支店,A株式会社,T00001,工具A,6 東京支店,A株式会社,T00002,工具B,0 東京支店,B有限会社,T00003,工具C,3 どのようにコーディングしたら実現できるか、いろいろSQLを作成していますが、 うまく辿り着かないため、作業が進まなくて困っています。 どのようなSQLでしたら実現できるでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Fran5
- ベストアンサー率0% (0/0)
Abeabe123さん、こんにちは。自分もSQLを勉強中です。本で学ぶより実践するほうが良いと聞き、この学習サイトを見つけました。 日本語版の練習サイトは準備中のようですが。役に立つかもです。 http://studybyyourself.com/jp-learn-sql/
- hoge1229
- ベストアンサー率29% (58/194)
いちおうそれに近しくなるものを書いてみましたが、現時点であがっているデータ、条件では求める結果にすることはできないかと。 SELECT o.officename ,p.partnername ,t.toolnumber ,t.toolname ,SUM(a.stock) FROM ((tooltbl AS t LEFT JOIN arrivaltbl AS a ON t.partnernumber = a.partnernumber AND t.toolnumber = a.toolnumber) INNER JOIN officetbl AS o ON a.officenumber = o.officenumber) INNER JOIN partnertbl AS p ON a.partnernumber = p.partnernumber GROUP BY o.officename, p.partnername, t.toolnumber, t.toolname 支店x取引先x工具の組み合わせがある状態で入荷(在庫)テーブルと紐付けるならできるでしょうけどそれは抽出後の結果(1)とは違うものですね。
- hoge1229
- ベストアンサー率29% (58/194)
下記のような感じでしょうか。 【抽出後の結果(1):全拠点の場合】 SELECT o.officename ,p.partnername ,t.toolnumber ,t.toolname ,a.stock FROM arrivaltbl AS a, tooltbl AS t, officetbl AS o, partnertbl AS p WHERE a.partnernumber = t.partnernumber AND a.toolnumber = t.toolnumber AND a.officenumber = o.officenumber AND a.partnernumber = p.partnernumber 【抽出後の結果(2):東京支店のみの場合】 SELECT o.officename ,p.partnername ,t.toolnumber ,t.toolname ,a.stock FROM arrivaltbl AS a, tooltbl AS t, officetbl AS o, partnertbl AS p WHERE a.partnernumber = t.partnernumber AND a.toolnumber = t.toolnumber AND a.officenumber = o.officenumber AND a.partnernumber = p.partnernumber AND a.officenumber = '001'
お礼
hoge1229さま 早速のご教授いただき、ありがとうございました。 お教えいただいたSQLは流れましたが、取り出したい結果とは違う形となってしまいました。 もしよろしければ、再度教えていただきたく思いますので、 よろしくお願いいたします。
補足
質問内容について、分かりにくかったところがありましたので補足致します。 ●補足1 抽出後の結果に出てくる内容は、工具テーブルに登録されているもの全てに対して、 在庫数を取り出したいと思っています。 入荷(在庫)テーブルの工具Noと工具テーブルの工具Noでマッチするものの条件ではありません。 ●補足2 入荷(在庫)テーブルに同一支店、同一工具Noのものが複数行存在する場合は、集計して1行で合計を表示するものとします。 また、在庫が0の場合も表示対象となります。