• 締切済み

レコードが選択されないときの、置換ができません

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 使用しています。

みんなの回答

  • trictrac
  • ベストアンサー率38% (10/26)
回答No.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

回答No.2

外部結合にしてはいかがでしょうか。 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 になるはずです。

回答No.1

> select nvl(max(COL_1),NULL,0) from TBL > where COL2 = 'hoge'; でなく select nvl(max(COL_1),0) from TBL where COL2 = 'hoge'; とする。

banshibo
質問者

補足

回答ありがとうございます。 すこし質問内容が間違っておりました。 正確に申しますと、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; 何卒、ご教授を御願いします。

関連するQ&A