- ベストアンサー
一回のSQLで商品名称とその売上件数の一覧を作成する方法
- 売上テーブルと商品マスタの情報を結合し、商品名称とその売上件数を一覧として表示するためには、一回のSQLで以下の処理をまとめることが可能です。
- まず、売上テーブルを商品IDでグループ化し、各商品ID毎の売上件数を算出します。次に、商品マスタから商品IDと商品名のリストを取得します。
- 最後に、商品IDをキーにして売上件数と商品名を結合し、売上件数が0件の商品も含めた一覧を作成します。これらの処理を一回のSQLで行うことで、効率的に結果を得ることができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
商品マスタをメインにして売上テーブルを左外部結合すれば、1回のSQLでデータ取得できるはずです。 select 商品マスタ.商品名,Count(商品マスタ.商品名) from 商品マスタ left outer join 売上テーブル where 売上テーブル.商品ID = 商品マスタ.商品ID group by 商品マスタ.商品名 こんな感じのSQL分でお望みの結果が出ると思うのですが・・・SQL Serverの環境がないので検証出来ません。
その他の回答 (2)
- nora1962
- ベストアンサー率60% (431/717)
> 【商品マスタ】 > ID 商品名 とあるのに、試されているSQLでは「商品マスタ.商品ID」になっているのが気になります。 テーブルのカラム名について確認されてはいかがですか。
お礼
ご回答頂きどうもありがとうございます。 あれから試行錯誤した結果、次のようなSQLで実現できました。 SELECT 商品ID ,商品名 ,isnull(tbl.件数, 0) 件数 from (select 商品ID, COUNT(*) 件数 from 売上テーブル group by 商品ID ) as tbl right join 商品マスタ on 商品マスタ.商品ID = tbl.商品ID
- marutone
- ベストアンサー率40% (70/174)
以下のソースをご参考ください。 SELECT 商品マスタ.商品名, COUNT(*) FROM 商品マスタ LEFT OUTER JOIN 売上テーブル ON 商品マスタ.商品ID = 売上テーブル.商品ID GROUP BY 商品マスタ.商品ID, 商品マスタ.商品名
お礼
ご回答頂きどうもありがとうございます。 ご教授頂いたSQLだと私もうまくいくような気がしていたのですが、実際に試してみると、なぜか0件のものについては表示されません。(LEFT JOINをRIGHT JOIN、INNER JOINに変更してみても駄目でした) group byの場合は左外部結合がうまくきかないことがあるのでしょうか?
補足
ご回答頂きどうもありがとうございました。 あれから試行錯誤した結果、次のようなSQLで実現できました。 SELECT 商品ID ,商品名 ,isnull(tbl.件数, 0) 件数 from (select 商品ID, COUNT(*) 件数 from 売上テーブル group by 商品ID ) as tbl right join 商品マスタ on 商品マスタ.商品ID = tbl.商品ID
お礼
ご回答頂きどうもありがとうございます。 ご教授頂いたSQLだと私もうまくいくような気がしていたのですが、実際に試してみると、なぜか0件のものについては表示されません。(LEFT JOINをRIGHT JOIN、INNER JOINに変更してみても駄目でした) group byの場合は左外部結合がうまくきかないことがあるのでしょうか?
補足
ご回答頂きどうもありがとうございました。 あれから試行錯誤した結果、次のようなSQLで実現できました。 SELECT 商品ID ,商品名 ,isnull(tbl.件数, 0) 件数 from (select 商品ID, COUNT(*) 件数 from 売上テーブル group by 商品ID ) as tbl right join 商品マスタ on 商品マスタ.商品ID = tbl.商品ID