• ベストアンサー

OraclのSQL文について(No2)

前回の質問の続きとなります。 Oracl の SQL文について、教えて下さい。 [A]テーブルに [CODE] と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE] と [NOUKI] と [KIN] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 A-1 2005/01/02 200 A-2 2005/01/01 300 A-2 2005/01/10 400 A-2 2005/12/10 500 と、します。 結果が、 A-1 NAME-1 300 A-2 NAME-2 1200 と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? SELECT A.CODE, A.NAME, B.KIN FROM A, B WHERE A.CODE = B.CODE ORDER BY A.CODE と、すると A-1 NAME-1 100 A-1 NAME-1 200 A-2 NAME-2 300 A-2 NAME-2 400 A-2 NAME-2 500 と、言う結果がでます。(当然ですが) しかし、 SELECT A.CODE, A.NAME, A2.KIN FROM A, A2 WHERE A.CODE = A2.CODE GROUP BY A.CODE,A.NAME ORDER BY A.CODE と、すると[GROUP BYの式ではありません]と、エラーになってしまいます。 (SUM文以前の問題でした) よろしくお願い致します。

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

  • ベストアンサー
回答No.1

グループ関数を使ってSQLを発行している様ですが、 SELECT部分でBテーブルの「KIN」フィールドに集計がかかっていません。 以下で目的のレコードを抽出できませんか? ------------------------------------------------- SELECT   A.CD, A.NAME, SUM(B.KIN) FROM   A, B WHERE   A.CODE = B.CODE GROUP BY   A.CD, A.NAME ORDER   BY A.CODE

m-toshi
質問者

お礼

何度も、恐縮です。 ご指導通りで、結果はでました。こちらの質問のミスですが、 結果が、 A-1 NAME-1 300 A-2 NAME-2 1200 A-3 NAME-3 0(またはnull) には、出来ないのでしょうか? さらに、 >GROUP BY A.CODE, A.NAME これは、要するにSELECT をした項目全てが、必要なのでしょうか ? [GROUP BY A.CODE] のみで、なんとかならないのでしょうか ? よろしくお願い致します。

m-toshi
質問者

補足

成功しました。ありがとうございます。 ただ、1つ疑問なのですが、 >GROUP BY A.CODE, A.NAME と、ありますが、これを [GROUP BY A.CODE]にするとエラーになって しまいます。 実際のプログラミングで、このGROUPを書かなければ ならないかと思うとゾッとます。(^^;

その他の回答 (2)

  • kj_
  • ベストアンサー率39% (9/23)
回答No.3

group by 式を使う場合は、取得する項目をすべて書きます。(グループ関数を除く) ※集計したい単位を書きます。 SELECT A.CODE,A.NAME,sum(B.KIN) FROM A,B WHERE A.CODE = B.CODE GROUP BY A.CODE,A.NAME; なぜかというと、 A.CODEとA.NAMEをGROUP(中身が同一な物)のB.KIN をSUM(集計)しなさいと言う命令になるからです。 A.CODE A.NAME   B.KIN -------------------------------- A-1   NAME-1    100     (1) A-1   NAME-1    200     (1) A-2   NAME-2    300     (2) A-2   NAME-2    400     (2) A-2   NAME-2    500      (2) ************** ************** SELECT   A.CODE,A.NAME,sum(B.KIN)   --↑欲しい情報は?  FROM A,B --↑どこから? WHERE A.CODE = B.CODE --↑どの条件で? GROUP BY A.CODE,A.NAME --↑集計単位は?     ※欲しい情報のすべてがグループ条件に      なる様に記述 ; ご参考までに・・・

m-toshi
質問者

お礼

ご回答をありがとうございました。 参考になりました。今後とも、宜しくお願い致します。

回答No.2

私の方でソース間違えてましたね。 一部A.CODEとしなければいけないところを A.CDとしていました。 訂正します。 ---------------------------------------------- SELECT   A.CODE, A.NAME, SUM(B.KIN) FROM   A, B WHERE   A.CODE = B.CODE GROUP BY   A.CODE, A.NAME ORDER   BY A.CODE

関連するQ&A

専門家に質問してみよう