dポイントプレゼントキャンペーン実施中!

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○

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

A 回答 (2件)

そういうことですか。


集計前に判断させればいいのでは?

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),());
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/27 11:37

このクエリは本当に正しいですか?私には


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

この回答への補足

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

間違いがありましたので訂正致します。
(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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!