みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

case whenとsum関数の併用について

Oracle9iのSQLPLUSにて、select結果の最終行に合計を出力したいだけなのですが、以下のようにcase when~と、sumを併用した場合に正しい合計値が集計されません。

select
AAA,BBB,CCC,sum(DDD),(case when sum(EEE < 0 then sum(EEE-(EEE*2)) else sum(EEE) end)
from
table_A
group by
GROUPING SETS(AAA,BBB,CCC),());

AAA,BBB,CCC,270,270
AAA,BBB,CCC,-270,-270
AAA,BBB,CCC,60,60
, , ,60,600

600×⇒60○

もしくは他に最終行にうまく合計値を出力する方法はありますでしょうか?
よろしくお願いします。

投稿日時 - 2008-07-26 00:43:32

QNo.4204397

困ってます

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

そういうことですか。
集計前に判断させればいいのでは?

SELECT
AAA,BBB,CCC,SUM(DDD),
SUM(CASE WHEN EEE < 0 THEN FFF*-1 ELSE FFF END)
FROM
TABLE_A
GROUP BY GROUPING SETS ((AAA,BBB,CCC),());

投稿日時 - 2008-07-26 17:53:38

お礼

そんなことができたんですね。。
勉強不足でした。
どうもありがとうございました。

投稿日時 - 2008-07-27 11:37:36

このQ&Aは役に立ちましたか?

20人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

このクエリは本当に正しいですか?私には
(case when sum(EEE) < 0 then sum(EEE-(EEE*2)) else sum(EEE) end)
というのはABS(SUM(EEE))と同じにしか見えないので、クエリの5カラム目にマイナスが返ってくる理由がわからないのですが。
EEE列がどんな状態だと、マイナスになるのでしょうか?

投稿日時 - 2008-07-26 02:46:24

補足

ご回答ありがとうございます。

間違いがありましたので訂正致します。
(case when sum(EEE) < 0 then sum(FFF-(FFF*2)) else sum(FFF) end)

↑例えば、EEE列が100、FFF列も100の場合、FFF列を100で、EEE列が-100、FFF列が100の場合、FFF列を-100にするものです。

申し訳ありませんでした。
宜しくお願い致します。

投稿日時 - 2008-07-26 13:08:56

あなたにオススメの質問