- 締切済み
レコードが選択されないときの、置換ができません
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 使用しています。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- trictrac
- ベストアンサー率38% (10/26)
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
- ryoku_chan
- ベストアンサー率0% (0/4)
外部結合にしてはいかがでしょうか。 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 になるはずです。
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
> 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; 何卒、ご教授を御願いします。