重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

countとdistinctを使ったSQL文について

VB2005+SQLSERVER2005で開発を行っています。

distinctとcountを組み合わせて抽出するようなSQL文になるのかなと思うのですが
うまくいきません

カラム maker:メーカ名が登録されている
テーブル shohin

カラムmakerの実際のデータ例

富士通
NEC
東芝
パナソニック
NEC
NEC
パナソニック

抽出した結果の例
富士通    1
NEC     3
東芝     1
パナソニック 2

メーカー名とその件数が出力結果となります

以上ですがわかる方いらっしゃいましたらご回答お願いいたします。

A 回答 (2件)

select m.name,s.makercd,count(s.makercd)


from shohin s left join meisho m on s.makercd=m.makercd
group by s.makercd;

追加質問に素直に答えると上記です。
追加質問のエラーというのは、多分ですが、
「Column 'makercd' in field list is ambiguous」ではないでしょうか?
であれば、これはgroup byで指定したmakercdに、
どちらのテーブルのmakercdかの指定がないためです。
上記のsqlは素直にそれを訂正しただけです。

ただ、例を見てたのですが、「004 東芝」はmeishoには登録されているけど
shohinに出てきていないですね。
-----------
001 富士通 3
002 NEC 2
003 パナソニック 1
004 東芝 0
-----------
もし、上記のような0件の結果も必要ならば以下となります。

select m.makercd,m.name,count(s.makercd)
from meisho m left join shohin s on m.makercd=s.makercd
group by s.makercd
order by m.makercd;
    • good
    • 0
この回答へのお礼

度々、ご回答ありがとうございました。
いわれた様に行いましたら完成することができました。
お忙しい中何度もご回答いただきましてありがとうございます

お礼日時:2013/02/05 18:51

distinctではなくgroup by を使います。



select maker,count(maker) from shohin group by maker;
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
助かりました。
しかし、もう一つ問題が発生しました

makerの所がメーカー名ではなくメーカーコードなのです。
それでleft joinでgroup by句をつなげることになると
思うのですがエラーが回避できません。

訂正
商品マスタ(shohin) カラム makercd
001
002
003
001
001
002

名称マスタ(meisho) カラムcode name
code name
001 富士通
002 NEC
003 パナソニック
004 東芝

のようになります。

こんな感じに自分なりに考えたのですがエラーがでて回避できません。
select name, makercd,count(makercd) from shohin
left join meisho on makercd = code
group by maker


お忙しいな中申し訳ありませんがもう一つご回答願いませんでしょうか

お礼日時:2013/02/05 17:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す