• ベストアンサー

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でグループ化すればとれるんですが、他にも取りたい項目がいくつかあるので。 わかりにくかったら、すみません。 よろしくお願いします。

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

  • ベストアンサー
  • trictrac
  • ベストアンサー率38% (10/26)
回答No.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をちょっと組み替えないと だめですね。

nirusu
質問者

お礼

大変お礼が遅くなりました。申し訳ありません。回答していただいたおかげで仕事も無事に終わりました。 ありがとうございました。

その他の回答 (1)

回答No.1

>KOKYAKU_CDでグループ化すればとれるんですが、他にも取りたい項目がいくつかあるので。 あくまで、欲しい結果が、KOKYAKU_CDの単位であるのだから、GROUP BYで、KOKYAKU_CDだけを指定する。 ”他に取りたい項目”についても、KOKYAKU_CDでグループ化したから取れないわけではなく、 取りたい項目の選抜条件が必要になるだけの話です。 もう少し具体的に、やりたいことを書かないと、ヒントの出しようもありません。