- ベストアンサー
SQLで複数テーブルからグループごとの合計を求める方法
- 2つのテーブルから、グループごとの合計を求めるSQL文の書き方を教えてください。
- テーブル名:グループ表と売上表があります。グループごとの売上合計一覧を出したいです。
- 現在のSQL文では一部のグループの合計が正しく計算されません。正しい書き方を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> 『ORA-25154: USING句の列の部分には修飾子を持てません』 先に例示したSQLのUSING句には、修飾子は無いのですが・・・。 「 USING(ID) 」の部分を 「 USING(グループ表.ID) 」などと変更しては無いでしょうか? USING句と同じことを ON を使っても書けますので、そうした場合はどうでしょうか? 例) -------------------------------------------------------------- SELECT グループ名, SUM(CASE WHEN 売上額 IS NULL THEN 0 ELSE 売上額 END) FROM グループ表 LEFT OUTER JOIN 売上表 ON(グループ表.ID = 売上表.ID) GROUP BY グループ表.ID, グループ表.グループ名 ------------------------------------------------------------------ ちなみにUSING句のカラムには表名修飾はできません。 http://okwave.jp/qa4871143.html
その他の回答 (3)
- root139
- ベストアンサー率60% (488/809)
> でも、うまく実行できませんでした。。 エラーが出たのか望ましくない結果が表示されたのか、どちらでしょう? エラーの内容、もしくは、表示された結果はどうなりますでしょうか? また、昔のバージョンの Oracle ですとFROM句で結合条件の記述ができなかったりします。 Oracle のバージョンはいくつでしょう?
補足
oracle 9iをです。 SI object browserを使っています。 以下のエラーがでました。よろしくお願いします。 『ORA-25154: USING句の列の部分には修飾子を持てません』
- root139
- ベストアンサー率60% (488/809)
私も外部結合を使えば良いと思います。 また、サブクエリを使う必要も無いかと。 例) --------------------------------------------------------------- SELECT グループ名, SUM(CASE WHEN 売上額 IS NULL THEN 0 ELSE 売上額 END) FROM グループ表 LEFT OUTER JOIN 売上表 USING(ID) GROUP BY グループ表.ID, グループ表.グループ名 ------------------------------------------------------------------- なお、手元に実行環境が無いので確認はしていません。
補足
ご回答ありがとうございます。 でも、うまく実行できませんでした。。
- wildcat-yp
- ベストアンサー率37% (303/813)
外部結合にすれば良いのでは? グループ名と売上額を right outer join で結合すれば良いのだと思います。 また、その際、AグループなどはNULLになりますので、売上額の箇所をNVL(売上額,0)として挙げる必要があると思います。 確認はしていませんが、 select グループ名,sum(売上額) from (select グループ名,NVL(売上額,0) from グループ表 RIGHT OUTER JOIN 売上表 ON(グループ表.ID = 売上表.ID)) group by グループ名 みたいな感じではどうでしょう?
補足
ご回答ありがとうございます。 でも、うまく実行できませんでした。。
お礼
実行できました!! ちなみにSUMは、 SUM(NVL(売上額,0))でもいけました。 SQLを始めてまだ3日、こういう教えていただける所があると、 大変助かります^^ありがとうござました