- ベストアンサー
sum関数での集計
1.顧客CDごとに合計を出します。 2.POINT_KINDにより、加算減算がわかれます。 使用するKOKYAKUTBLのカラム KOKYAKU_CD PLACE_CD POINT_KIND POINT : : 主キーは、KOKYAKU_CD,PLACE_CD,POINT_KIND テーブル KOKYAKU_CD PLACE_CD POINT_KIND POINT 00001 0 0 10 00001 0 1 30 00001 1 0 10 00001 1 1 30 00002 0 0 10 00002 0 1 20 とあるとします。 SELECT KOKYAKU_CD,PLACE_CD, SUM(DECODE(POINT_KIND,'2',POINT * -1, '3',POINT * -1, ,POINT)) AS POINT_SUM FROM KOKYAKUTBL GROUP BY KOKYAKU_CD,PLACE_CD でデータを取得すると下記の様になります。(家には環境がないので多分こうなると思います) KOKYAKU_CD PLACE_CD POINT 00001 0 40 00001 1 40 00002 0 30 今回の場合は、KOKYAKU_CDごとの合計を出力したいのです。期待する結果は下記の通りです。 KOKYAKU_CD POINT 00001 80 00002 60 KOKYAKU_CDでグループ化すればとれるんですが、他にも取りたい項目がいくつかあるので。 わかりにくかったら、すみません。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
他の項目をどう取りたいかにもよりますが、 select KOKYAKU_CD , max( PLACE_CD ) , sum( decode( POINT_KIND, '2', POINT * -1 , '3', POINT * -1 , POINT ) ) AS POINT_SUM from KOKYAKUTBL group by KOKYAKU_CD こうすると、下記のようになります。 KOKYAKU_CD PLACE_CD POINT 00001 1 80 00002 0 60 グループ化しない物はmaxやmin関数を使うと良いでしょう。 それでは困るのであれば、このSQLをちょっと組み替えないと だめですね。
その他の回答 (1)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
>KOKYAKU_CDでグループ化すればとれるんですが、他にも取りたい項目がいくつかあるので。 あくまで、欲しい結果が、KOKYAKU_CDの単位であるのだから、GROUP BYで、KOKYAKU_CDだけを指定する。 ”他に取りたい項目”についても、KOKYAKU_CDでグループ化したから取れないわけではなく、 取りたい項目の選抜条件が必要になるだけの話です。 もう少し具体的に、やりたいことを書かないと、ヒントの出しようもありません。
お礼
大変お礼が遅くなりました。申し訳ありません。回答していただいたおかげで仕事も無事に終わりました。 ありがとうございました。