• ベストアンサー

ORACLE10gのSQL文について

SQL分についての質問です。(ORACLE10g) データが CODE(KEY) CODE2(KEY) LINE(KEY) MONEY A B 1 100 A C 2 200 A B 3 300 と、します。 結果が A B 100 400 A B 300 400 A C 200 200 と、したいのです。つまり、MONEYとMONEYの合計が ほしいのです。 色々と頑張ったのですが、解りません。 宜しくお願い致します。

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

  • ベストアンサー
  • xKENx
  • ベストアンサー率65% (21/32)
回答No.1

合計列を計算するサブクエリーを作成して、元の表と結合すればできそうです。 以下サンプル。 SELECT A.CODE1, A.CODE2, A.MONEY ,B.MONEY_SUM  FROM "テーブル" A   , (SELECT CODE1, CODE2, SUM(MONEY) MONEY_SUM FROM "テーブル"     GROUP BY CODE1, CODE2     ) B  WHERE B.CODE1 (+) = A.CODE1   AND B.CODE2 (+) = A.CODE2  ORDER BY A.CODE1,A.CODE2,A.LINE

m-toshi
質問者

お礼

お返事が遅くなり申し訳ございません。 皆様のお陰で、解決できました。 ありがてうございました。 今後とも、宜しくお願い致します。

m-toshi
質問者

補足

ありがとうございました。思う結果が得られました。 ただ、実際は、 GROUP BY A.CODE, A.CODE2, A.MONEY ,B.MONEY_SUM と、する必要があります。これをすると [GROUP BY の式ではありません]と、エラーになってしまいます。 どうすれば良いのでしょうか? 引き続きお願いできれば、幸いです。宜しくお願い致します。

その他の回答 (2)

  • h-adachi
  • ベストアンサー率0% (0/2)
回答No.3

SELECT CODE1,CODE2,MONEY, sum(MONEY) over(partition by CODE1,CODE2) FROM "テーブル" ORDER BY CODE1,CODE2 ではどうでしょうか?

m-toshi
質問者

お礼

お返事が遅くなり申し訳ございません。 皆様のお陰で、解決できました。 ありがてうございました。 今後とも、宜しくお願い致します。

m-toshi
質問者

補足

ご回答をありがとうございます。 こう言う方法は、全く知りませんでした。 これで、group by も、付け、成功致しました。 ただ、実際はもっと複雑なので、色々と試してみます。

  • xKENx
  • ベストアンサー率65% (21/32)
回答No.2

実際は他にも項目があって、それらを含めたSELECTにするとエラーになるということですよね。 GROUP BYを使った場合、選択項目に指定できるのはGROUP BY で指定した項目か集計関数のみです。 それに反している場合「GROUP BY の式ではありません」エラーになるはずです。 確認してみてください。

m-toshi
質問者

お礼

お返事が遅くなり申し訳ございません。 皆様のお陰で、解決できました。 ありがてうございました。 今後とも、宜しくお願い致します。

m-toshi
質問者

補足

お返事が遅くなり申し訳ございません。 >実際は他にも項目があって、それらを含めたSELECTにするとエラー] >になるということですよね。 その通りです。他のテーブルも絡んでおり、複雑です。 このやり方では、group by は、出来ないと言う事でしょうか? 何度も、恐縮です。宜しくお願い致します。

関連するQ&A