SQL初心者のための抽出条件入力について

このQ&Aのポイント
  • SQL初心者が抽出条件入力用テキストボックスの使い方について質問しています。具体的には、テーブルにある複数の列に対して値を入力して検索する方法を知りたいとのことです。
  • 具体的な例として、VALUE_B、VALUE_C、VALUE_Dの3つの列に値を入力して検索を行う場合の動作について説明されています。また、複数の列に対して値を指定した場合の動作についても示されています。
  • SQLのANDやORだけでは対応できない場合もあるため、その場合にどのようなSQLを組めば良いか分からないとのことです。また、Oracleを始めたばかりのため、どのような関数を使うべきかも分からないとのことです。
回答を見る
  • ベストアンサー

抽出条件入力用テキストボックスが空白の場合の抽出条件

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を始めたばかりということもあり、どのような関数を使えばよいのかもわかりません。どなたかご教授いただけませんでしょうか??よろしくお願いします。

  • wiser
  • お礼率50% (3/6)
  • Oracle
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • NAATAN
  • ベストアンサー率33% (57/170)
回答No.2

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')

wiser
質問者

お礼

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

その他の回答 (1)

  • NAATAN
  • ベストアンサー率33% (57/170)
回答No.1

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'」の部分は何でもかまいませんが、形式だけは合わせてください)

関連するQ&A

  • [Javascript]テキストボックス入力でコンボ絞込みの技!?

    おはよう御座います。 WEBアプリを開発しています者で、困っておりますのでHELPです! テキストボックスとドロップダウンボックスが並んでいます。 ドロップの中には・・・ (value / 表示値) aaa / 商品A と abc / 商品B と bbb / 商品C と caa / 商品D という4つが入っているとします。 テキストボックスに a と入れるとA,Bだけに絞り込まれ、 次に b (このとき ab)を入れるとBだけに絞り込まれるというような技はありませんか?? また、完全に絞り込まれて表示までもなくなるまでいかずしても、選択されているアイテムが変わるだけでもいいのですが・・・。 実際はドロップ内に30以上の選択内容が入っているためドロップで探して選択・・・ということができる状況にはないのです。 テキストで入力しながら絞り込むなどができれば非常に便利になります。 是非とも宜しくお願いいたします。 近い内容が紹介されているサイトの紹介でもかまいませんので宜しくお願いいたします!

  • Accessで複数条件抽出

    Accessで複数条件抽出をする方法を教えてください。 フォーム内に[A]、[B]のテキストボックスがあり、検索用のテキストボックス[C]を設けており、[C]入力した文字が[A]または[B]に入力されているデータと一致するものを抽出したいのですが、以下のようなコードではうまくいきません。 Me.Filter="A='" & Me![C] & "'" Or "B='" & Me![C] & "'" どのようにすればうまく抽出できるか教えてください。

  • ある条件を持たないレコードの抽出

    下記のようなデータがあります。 col1 col2 ========== 001 AAA 001 BBB 001 CCC 002 AAA 002 CCC 003 BBB 003 CCC 004 AAA col2 にBBB を持たないレコードを抽出したいのですが どのようにSQLを記述すればよいかご教授ください。 得たい結果 002 004 どうぞよろしくお願いいたします。

  • Accessの検索フォーム

    またまたAccessについての質問です。 検索フォームというのを作りました。 テーブルのデータから条件に合うものだけを抽出したいのです。 たとえば1つ目の検索フォーム[A]のテキストボックスに「AAA」を入力します。 そのあとBには「BBB」と入力します。 同じくCには「CCC」と入力します。 そして絞込みボタンを押したらAAAでBBBでCCCのものが抽出されます。 これはうまくいきました。 とりあえず、複数条件なので、わけもわからず「&」で結んでしまいました・・・。 ↓は絞込みボタンのクリック時です。↓ 困ったのは、すべて検索条件を指定しない場合です。 たとえば「AAA」で「CCC」のものを抽出したいとき、[A]のテキストボックスに「AAA」と入れ [C]のテキストボックスに「CCC」と入れます。 そして絞込みボタンをクリック。 するとBが未記入だからか、抽出されたのは真っ白でした・・・。 Option Compare Database Private Sub コマンド50_Click() Me.Filter = "契約='" & Me!テキスト51 & "'and A='" & Me!テキスト57 & "'" Me.FilterOn = True End Sub 組み合わせが自由になる検索フォームにするにはどうすればよいのでしょうか? 誰か助けてくださ~い!

  • excel vba複数行入力可能なテキストボックスを上段から複数列に表示

    よろしくお願いします。 現在ユーザーフォーム上に3つのテキストボックス (複数行ではありません)があり、それぞれに文字を打ち込んで、コマンドボタンでセルに転記させているのですが、もっと効率のよい方法はないのかと思い探したもののなかったため質問いたします。 (複数行のセルにはありましたが、複数列のセルに転記がなかったため) 複数行入力可能なテキストボックスに入力された文字を上段から1行ずつA10からC10と列に転記したいのです。 こんな感じです テキストボックス |------| |AAA       |  |BBB       | |CCC       | |------| 複数行入力し(空欄の時もあります)コマンドボタンをクリックすると シート1の     A      B     C ・ 10 AAA   BBB   CCC

  • プルダウンからテキストボックスに入力

    プルダウンから選択したものをテキストボックスに表示させています。 <script type="text/javascript"> function displayText(thatOption, textId) { var text1 = document.getElementById(textId); text1.value = thatOption.title; } </script> <SELECT onchange="displayText(this.options[this.selectedIndex], 'text1');"> <option value="1" title=""></option>  #空欄 <option value="2" title="A">A</option> #大文字 <option value="3" title="a">a</option> #小文字 </SELECT> <input type="text" value="" id="text1"> プルダウンを2個や5個など複数用意して、それぞれ選択したものをテキストボックス1行に 続けて表示させたいです。 上記のプルダウンをA~Eまで用意した場合、[A b C D e]と表示させたり、Cは選ばず 空欄を選択した場合は、[A b D e]と表示させる事は可能でしょうか? また、テキストボックスにvalue="ZZ"と初期表示を入れて、その後に 続くように表示させたいです。 [ZZ A b C D e]とする事は可能でしょうか?

  • テキストボックスにクエリ結果を表示させたい

    フォームにテキストボックスAがあり、そこに入力した文字(下記テーブルのフィールド1の文字)をクエリーの「抽出条件」にし、同じフォーム上のテキストボックスBに表示しようと思っています。 クエリを開くとパラメータの入力を求めてきて、入力するとうまく抽出されます。 テーブルは フィールド1|フィールド2   A   |  10   B   |  20   C   |  30   D   |  40 のような簡単なものです。 テキストボックスBのコントロールソースに 「=[○×クエリ]![フィールド2]とやっても「#Name?」と表示されてしまいます。 どのようにやればよいのでしょうか?

  • 一覧表よりデータ条件抽出

    教えてください。 下記データ表があります。    A     B      C 1  12/1  AAA  94.1% 2  12/2  BBB  95.6% 3  12/2  BBB  (空白) 4  12/3  CCC  97.3% 5  12/4  DDD  98.4% 6  12/5  EEE  97.3% ・したいこと条件説明 12/2~12/4のデータのみを抽出 %の(空白)セル(行)は抽出しない 日付(A列)は表示しない ・表示結果    A    B 1  BBB  95.6% 2  CCC  97.3% 3  DDD  98.4% としたいのですが・・・ いろいろ試してみましたが、うまくいきません。 よろしく、ご教授のほどお願いします。

  • セレクトメニューと複数のテキストボックス連携

    お世話になります。セレクトメニュー1個と複数(2個)の テキストボックスに連携についてお尋ねします。 セレクトメニュー1個の選択肢が「aaa」「bbb」「ccc」とあり、 「aaa」を選んだら、その value がテキストボックス1に「111」が入り、それと同時にテキストボックス2に「アルファベットの1番目」と入り、 「bbb」を選んだら、その value がテキストボックス1に「222」が入り、それと同時にテキストボックス2に「アルファベットの2番目」と入り、 「ccc」を選んだら、その value がテキストボックス1に「333」が入り、それと同時にテキストボックス2に「アルファベットの3番目」と入る、 ようにしたいのですが、どのような記述にしたらよろしいのでしょうか? よろしくお願い致します。

  • ACCESS クエリ 抽出条件が多い場合

    ACCESSの超初心者です。 選択クエリで、80件ほどの抽出条件を部分一致で 設定しています。(Likeを使用) 例えばこんな感じです。  フィールド   aaa1   bbb52   aaa33   aac8   bba35   bba115    抽出条件 Like "aaa*" Or Like "bba*" →抽出結果 aaa1,aaa33,bba35,bba115 今後も条件が増えていく予定なので、別の 良い方法がないかと思っています。 (できるかどうかわかりませんが、 別にテーブルを作り、その一覧内の文字が 含まれるレコードのみを抽出) 皆さんのお知恵をお貸しいただけないでしょうか。 宜しくお願いします。