- ベストアンサー
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の合計が ほしいのです。 色々と頑張ったのですが、解りません。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
合計列を計算するサブクエリーを作成して、元の表と結合すればできそうです。 以下サンプル。 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
その他の回答 (2)
- h-adachi
- ベストアンサー率0% (0/2)
SELECT CODE1,CODE2,MONEY, sum(MONEY) over(partition by CODE1,CODE2) FROM "テーブル" ORDER BY CODE1,CODE2 ではどうでしょうか?
お礼
お返事が遅くなり申し訳ございません。 皆様のお陰で、解決できました。 ありがてうございました。 今後とも、宜しくお願い致します。
補足
ご回答をありがとうございます。 こう言う方法は、全く知りませんでした。 これで、group by も、付け、成功致しました。 ただ、実際はもっと複雑なので、色々と試してみます。
- xKENx
- ベストアンサー率65% (21/32)
実際は他にも項目があって、それらを含めたSELECTにするとエラーになるということですよね。 GROUP BYを使った場合、選択項目に指定できるのはGROUP BY で指定した項目か集計関数のみです。 それに反している場合「GROUP BY の式ではありません」エラーになるはずです。 確認してみてください。
お礼
お返事が遅くなり申し訳ございません。 皆様のお陰で、解決できました。 ありがてうございました。 今後とも、宜しくお願い致します。
補足
お返事が遅くなり申し訳ございません。 >実際は他にも項目があって、それらを含めたSELECTにするとエラー] >になるということですよね。 その通りです。他のテーブルも絡んでおり、複雑です。 このやり方では、group by は、出来ないと言う事でしょうか? 何度も、恐縮です。宜しくお願い致します。
お礼
お返事が遅くなり申し訳ございません。 皆様のお陰で、解決できました。 ありがてうございました。 今後とも、宜しくお願い致します。
補足
ありがとうございました。思う結果が得られました。 ただ、実際は、 GROUP BY A.CODE, A.CODE2, A.MONEY ,B.MONEY_SUM と、する必要があります。これをすると [GROUP BY の式ではありません]と、エラーになってしまいます。 どうすれば良いのでしょうか? 引き続きお願いできれば、幸いです。宜しくお願い致します。