• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL文 2つのテーブルから、グループごとの合計を求める)

SQLで複数テーブルからグループごとの合計を求める方法

このQ&Aのポイント
  • 2つのテーブルから、グループごとの合計を求めるSQL文の書き方を教えてください。
  • テーブル名:グループ表と売上表があります。グループごとの売上合計一覧を出したいです。
  • 現在のSQL文では一部のグループの合計が正しく計算されません。正しい書き方を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.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

necktie88
質問者

お礼

実行できました!! ちなみにSUMは、 SUM(NVL(売上額,0))でもいけました。 SQLを始めてまだ3日、こういう教えていただける所があると、 大変助かります^^ありがとうござました

その他の回答 (3)

  • root139
  • ベストアンサー率60% (488/809)
回答No.3

> でも、うまく実行できませんでした。。 エラーが出たのか望ましくない結果が表示されたのか、どちらでしょう? エラーの内容、もしくは、表示された結果はどうなりますでしょうか? また、昔のバージョンの Oracle ですとFROM句で結合条件の記述ができなかったりします。 Oracle のバージョンはいくつでしょう?

necktie88
質問者

補足

oracle 9iをです。 SI object browserを使っています。 以下のエラーがでました。よろしくお願いします。 『ORA-25154: USING句の列の部分には修飾子を持てません』

  • root139
  • ベストアンサー率60% (488/809)
回答No.2

私も外部結合を使えば良いと思います。 また、サブクエリを使う必要も無いかと。 例) --------------------------------------------------------------- SELECT グループ名, SUM(CASE WHEN 売上額 IS NULL THEN 0 ELSE 売上額 END) FROM グループ表 LEFT OUTER JOIN 売上表 USING(ID) GROUP BY グループ表.ID, グループ表.グループ名 ------------------------------------------------------------------- なお、手元に実行環境が無いので確認はしていません。

necktie88
質問者

補足

ご回答ありがとうございます。 でも、うまく実行できませんでした。。

回答No.1

外部結合にすれば良いのでは? グループ名と売上額を right outer join で結合すれば良いのだと思います。 また、その際、AグループなどはNULLになりますので、売上額の箇所をNVL(売上額,0)として挙げる必要があると思います。 確認はしていませんが、 select グループ名,sum(売上額)  from (select グループ名,NVL(売上額,0)     from グループ表 RIGHT OUTER JOIN 売上表      ON(グループ表.ID = 売上表.ID))   group by グループ名 みたいな感じではどうでしょう?

necktie88
質問者

補足

ご回答ありがとうございます。 でも、うまく実行できませんでした。。

関連するQ&A