プロが教えるわが家の防犯対策術!

テーブル名:グループ表
ID   グループ名
-------------------------
100   Aグループ
101   Bグループ
102   Cグループ
103   Dグループ
104   Eグループ

テーブル名:売上表
ID   売上年月日   売上額
------------------------------
101   20090401   1000
101   20090501   2000
102   20090401   2500
102   20090503   1500
103   20090404   3000
103   20090506   4000

上記の2つのテーブルがあります。
グループごとの売上合計一覧を出します。

■求めたいSELECT文結果
グループ名   合計(売上額)
----------------------
Aグループ    0
Bグループ   3000
Cグループ   4000
Dグループ   7000
Eグループ    0


select グループ名,sum(売上額)
 from (select グループ名,売上額
    from グループ表,売上表
     where グループ表.ID = 売上表.ID)
  group by グループ名

では、

グループ名   合計(売上額)
----------------------
Bグループ   3000
Cグループ   4000
Dグループ   7000

となってしまい、うまくいきません・・・
どうように書いたらよろしいでしょうか?

A 回答 (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
    • good
    • 0
この回答へのお礼

実行できました!!
ちなみにSUMは、
SUM(NVL(売上額,0))でもいけました。

SQLを始めてまだ3日、こういう教えていただける所があると、
大変助かります^^ありがとうござました

お礼日時:2009/10/06 09:07

> でも、うまく実行できませんでした。



エラーが出たのか望ましくない結果が表示されたのか、どちらでしょう?
エラーの内容、もしくは、表示された結果はどうなりますでしょうか?

また、昔のバージョンの Oracle ですとFROM句で結合条件の記述ができなかったりします。
Oracle のバージョンはいくつでしょう?

この回答への補足

oracle 9iをです。

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

補足日時:2009/10/05 09:37
    • good
    • 0

私も外部結合を使えば良いと思います。


また、サブクエリを使う必要も無いかと。

例) ---------------------------------------------------------------
SELECT
グループ名,
SUM(CASE WHEN 売上額 IS NULL THEN 0 ELSE 売上額 END)
FROM グループ表 LEFT OUTER JOIN 売上表 USING(ID)
GROUP BY グループ表.ID, グループ表.グループ名
-------------------------------------------------------------------

なお、手元に実行環境が無いので確認はしていません。

この回答への補足

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

補足日時:2009/10/05 08:07
    • good
    • 0

外部結合にすれば良いのでは?


グループ名と売上額を right outer join で結合すれば良いのだと思います。
また、その際、AグループなどはNULLになりますので、売上額の箇所をNVL(売上額,0)として挙げる必要があると思います。

確認はしていませんが、
select グループ名,sum(売上額)
 from (select グループ名,NVL(売上額,0)
    from グループ表 RIGHT OUTER JOIN 売上表
     ON(グループ表.ID = 売上表.ID))
  group by グループ名
みたいな感じではどうでしょう?

この回答への補足

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

補足日時:2009/10/05 08:03
    • good
    • 0

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

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