「これはヤバかったな」という遅刻エピソード

select max(COL_1) from TBL
where COL2 = 'hoge';

というようなSQLがあり、この条件での選択されるレコードが存在しないとき
max(COL_1)の値を"0"(ゼロ)にしたいのですが。。。

select nvl(max(COL_1),NULL,0) from TBL
where COL2 = 'hoge';

と修正しても結果は変わらず「レコードが選択されませんでした。」
となってしまいます。

他にdecodeや、countも試したのですが、力量不足のため、上手くいきません。。
どなたかご教授願います。

Oracle 9i で SQL*Plus 使用しています。

A 回答 (3件)

dual表から1件0を取得し、集計したらどうでしょう。



select A.COL, sum( nvl( CNT, 0 ) )
from (
select COL_2 COL
, count( COL_1 ) CNT
from TBL
where COL_2 = 'hoge'
group by COL_2
union
select 'hoge' COL
, 0 CNT
from dual
) A
group by A.COL
    • good
    • 0

外部結合にしてはいかがでしょうか。


select decode(count(COL_1),0,0,max(COL_1)) col_1,
COL_2
from TBL
where COL_2(+) = 'hoge'
group by COL_2;

実際に環境がないため断言はできませんが
結果は
col_1 col_2
---------------
0 null

になるはずです。
    • good
    • 0

> select nvl(max(COL_1),NULL,0) from TBL


> where COL2 = 'hoge';

でなく

select nvl(max(COL_1),0) from TBL
where COL2 = 'hoge';

とする。

この回答への補足

回答ありがとうございます。
すこし質問内容が間違っておりました。
正確に申しますと、group byを使用した際の
NO_ROW時の帰り値の差異に関する質問となります。

select decode(count(COL_1),0,0,max(COL_1))
from TBL
where COL_2 = 'hoge';

では、ちゃんと数字が帰ってきます。(レコードが存在しない場合は'0'で。)
ところが、↓だとレコードが無い場合には
レコードが選択されませんでした。 と値を返してくれません。。
どうすればよろしいでしょうか。。

select decode(count(COL_1),0,0,max(COL_1)),COL_2
from TBL
where COL_2 = 'hoge'
group by COL_2;

何卒、ご教授を御願いします。

補足日時:2007/08/06 11:01
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

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


おすすめ情報