アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQL初心者です。

今あるテーブル(TABLE)に
| VALUE_A | VALUE_B | VALUE_C | VALUE_D |
-----------------------------------------
| 000 | AAA | AAA | AAA |
| 001 | AAA | AAA | BBB |
| 002 | AAA | BBB | AAA |
| 003 | BBB | BBB | BBB |
| 004 | BBB | BBB | NULL |
のようなデータが入っているとします。

Web上から VALUE_B VALUE_C VALUE_D に対しそれぞれテキストボックス入力フィールドから値を入力し検索を行うようにしたいのです。

[VALUE_B]=AAA
[VALUE_C]=AAA
[VALUE_D]=AAA
と入力されれば
VALUE_A:000
を検索結果として出します。

[VALUE_B]=AAA
[VALUE_D]=AAA
と入力されれば
VALUE_A:000
VALUE_A:002
を検索結果として出します。

[VALUE_B]=AAA
だけが入力された場合は
VALUE_A:001
VALUE_A:002
VALUE_A:003
を検索結果として出します。

つまり、フォームのテキストボックスに入力された条件で抽出し、入力が無い場合は全件抽出を行いたいのです。

この場合、どのようなSQLを組めばよいのかわかりません。ANDやORだけでは対応できないような気がします。Oracleを始めたばかりということもあり、どのような関数を使えばよいのかもわかりません。どなたかご教授いただけませんでしょうか??よろしくお願いします。

A 回答 (2件)

FORMSについての知識は全く無いのですが…



一般的なSQLを組むとすると以下の様になると思います。
SELECT VALUE_A
FROM TABLE
WHERE NVL([VALUE_B],NVL(VALUE_B,'0')) = NVL(VALUE_B,'0')
AND NVL([VALUE_C],NVL(VALUE_C,'0')) = NVL(VALUE_C,'0')
AND NVL([VALUE_D],NVL(VALUE_D,'0')) = NVL(VALUE_D,'0')

9iで試してみたら上手くいきました。
「VALUE_B,'0'」の「'0'」の部分は何でもかまいませんが、形式だけは合わせてください)
    • good
    • 0

No.1です。



下記の回答は、未入力の場合にNULLがセットされると仮定した場合ですが、空白がセットされる場合は以下の様になります。

SELECT VALUE_A
FROM TABLE
WHERE DECODE([VALUE_B],' ',NVL(VALUE_B,'0'),[VALUE_B]) = NVL(VALUE_B,'0')
AND DECODE([VALUE_C],' ',NVL(VALUE_C,'0'),[VALUE_C]) = NVL(VALUE_C,'0')
AND DECODE([VALUE_D],' ',NVL(VALUE_D,'0'),[VALUE_D]) = NVL(VALUE_D,'0')
    • good
    • 0
この回答へのお礼

早速の回答、ありがとうございます。
こちらでも動作確認が取れました。
DECODEはIFのような条件判断を多数行ってくれる、便利な関数なんですね。勉強になりました。

お礼日時:2005/02/22 11:23

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