- 締切済み
【SQL】group byについて
SELECT A.商品名 B.商品名 FORM A,B WHERE ((A.店コード IN (引数.店コード)) and (A.商品コード IN(引数.商品コード)) AND (A.店コード = C.店コード) AND ((A.商品コード = D.商品コード) AND (A.店コード = D.店コード)) というSQLに下記条件を追加したいのですが、集計関数の使用方法がわかりません。 SELECT Sum(金額) FROM Q WHERE Q.店コード = A.店コード AND Q.商品コード = A.商品コード GROUP BY Q.店コード, Q.商品コード Qテーブルは 店コード、商品コード、メニューコード がKEYなのですが、 店コードと商品コードだけで集計した値をSELECTしたいのです。 恐れ入りますが、ご教授頂けますよう宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- papparapar
- ベストアンサー率66% (2/3)
つまり、仕様的には 1.AテーブルとマスタのCテーブルを結合した店コードを取得する。 2.取得した店コードでDテーブルの商品コードを取得する。 3.1で取得した店コードと2で取得した商品コードでQテーブルより金額を取得したい。 その際、店コードと商品コードが同じものがあれば合計金額で取得したい。 と言うことでよろしいでしょうか? select Q.店コード,Q.商品コード,sum(Q.金額) as 金額 from (select A.店コード,D.商品コード from A,C,D where A.店コード=C.店コード and A.店コード=D.店コード group by A.店コード,D.商品コード) E , Q where E.店コード=Q.店コード and E.商品コード=Q.商品コード group by Q.店コード,Q.商品コード でいいと思います。 問題はA,B,Cの結合ときに複数の商品コードが取得されるので、ここで同じ商品コードは1つしか取得するようにしなければなりません。そうでなければ同じ商品コード複数取得されることになり後の勝利が上手く行きません。 取得した店コードと商品コードでQテーブルより金額を取得し集計を行います。ここでも複数の商品コードが発生することになりますのでgroup byが必要でしょう。動作確認はしておりませんので、悪しからず。
- mjsamiasan
- ベストアンサー率57% (55/95)
#1さんと同じ感想を持ったものですが、それではあんまりなのでw ・最初のselect文に登場するC,Dのテーブルは何ですか? ・A,B,C,D,Qのテーブルのカラムを抜粋でいいので教えて下さい。 ・集計するのはどのテーブルに属する金額なのでしょうか? ・店コード、商品コードは全てのテーブルが持っていてKeyになっているのでしょうか? 以上です。
- joih
- ベストアンサー率35% (37/105)
(1)Qテーブルから金額合計、A,B テーブルから商品名を取得する (2)Q,A,B は 店コード、商品コード で結合 (3)取得するのは 引数の店コード、商品コードのみ というのであれば、 SELECT W.店コード ,W.商品コード ,X.商品名 ,W.金額 FROM ( SELECT 店コード ,商品コード ,Sum(金額) AS 金額 FROM Q WHERE 店コード = 引数 AND 商品コード = 引数 GROUP BY 店コード, 商品コード ) W LEFT JOIN ( SELECT 店コード, 商品コード, 商品名 FROM A WHERE 店コード = 引数 AND 商品コード = 引数 UNION ALL SELECT 店コード, 商品コード, 商品名 FROM B WHERE 店コード = 引数 AND 商品コード = 引数 ) X ON ( W.店コード = X.店コード AND W.商品コード = X.商品コード )
お礼
ありがとうございます。 大変参考になりました。 今回はunionが使えないのですが、 じっくり読みこみました。 ありがとうございます。 今後に役立てようと思います。
- joih
- ベストアンサー率35% (37/105)
仕様を日本語で書いてもらえませんか
補足
恐れ入ります。日本語にて表現しています。 ---各テーブルkey ・Aテーブル(データ) 店コード ・Cテーブル(マスタ) 店コード ・Dテーブル(マスタ) 店コード 商品コード ・Qテーブル(データ) 店コード 商品コード メニューコード --- (処理内容)店コードと商品コードを引数にデータを取得する。 (1)⇒Aデータの情報(棚卸数)と、Aの店コードと紐づいたCの店名 Aの店コードと、商品コードと紐づいたDの商品名を取得。 (2)(ここから追加処理)(1)および、 ⇒Qの店コードとAの店コードが同じ、 Qの商品コードとA商品コードが同じであることを条件に集計し Qテーブルにある金額をサマリしたい。 ---Qテーブルの内容 店コード:商品コード:メニューコード:金額 123 :456 :01 :100 123 :456 :02 :200 --- 結果、金額に関しては、 引数.店コード:123、引数.商品コード:456の場合、「300」の出力を行いたい。 ◇当初の質問より訂正した個所 SELECT A.棚卸数 C.店名 D.商品名 FORM A,C,D 以上となります。 宜しくお願いします。
お礼
ありがとうございます。 上記内容で動作しました。 ご丁寧にありがとうございました。