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

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

解決済みの質問

case when elseとグループ関数の併用について

こんばんわ!

Oracle9iのSQLPlusにて、table_Aテーブルの「AAA」に登録されている値ごとにカウントをとりたいだけなのですが、未入力分のカウントも必要になります。そこで以下のようなSQL文を作りました。

select
case when AAA IS NULL then '未入力' else AAA end,
count(distinct BBB)
from
table_A
group by
GROUPING SETS((AAA),())

結果は以下のように最後の合計行にも未入力が入ってしまいます。
AAA   count
あ   10
い   5
う   6
え   15
お   12
未入力 7
未入力 55 ←GROUPING SETS関数による合計

いろいろ試してみましたがうまくいきません。
どなたかご教授いただけませんでしょうか?
宜しくお願い致します。

投稿日時 - 2008-08-14 23:18:25

QNo.4251815

困ってます

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

本当なら「case when AAA IS NULL then '未入力' else AAA end」がグルーピングのキーであるはずが、GROUPING SETSに指定されているのはAAAですから、「結果がNULLなら'未入力'と表示する」が結果全体に掛ってしまっているのが理由です。
select
case when AAA IS NULL then '未入力' else AAA end,
count(distinct BBB)
from
table_A
group by
GROUPING SETS((case when AAA IS NULL then '未入力' else AAA end),())
とすれば、目的の結果が返ります。

ただ、今回の例ならNVLを使った方が見やすいです。
select
NVL(AAA,'未入力'),
count(distinct BBB)
from
table_A
group by
GROUPING SETS((NVL(AAA,'未入力')),())

投稿日時 - 2008-08-15 11:05:22

お礼

うまくいけました。どうもありがとうございました。
またよろしくお願いします。

投稿日時 - 2008-08-16 12:41:17

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

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

回答(1)

あなたにオススメの質問