【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

こんばんわ!

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関数による合計

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

A 回答 (1件)

本当なら「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,'未入力')),())
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/08/16 12:41

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

関連するカテゴリからQ&Aを探す