ADOでOracleに接続する際に相当するSQL関数

このQ&Aのポイント
  • Access2002からADO経由でOracleに接続し、データを取得する方法について説明します。
  • SQLで条件分岐する際に、「IIF」や「IF」に相当する関数が存在するかどうかについて質問しています。
  • DECODE関数はIF関数に似ていますが、Between~And~や不等号での分岐ができないため、他の関数の存在を求めています。
回答を見る
  • ベストアンサー

Accessの「IIF」に相当するSQL関数(ADOでOracleに接続時)

Access2002からADO経由でOracleに接続し、データを取得しようと 思っています。 AccessのクエリやExcel関数では、「IIF」、「IF」で条件分岐が出 来ますが、SQLでこれに相当する関数はありますか? 具体的には、   ・日付A が 2007/08/01 ~ 本日 の間なら、「手配数」フィー ルドの数字を返す   ・日付Aが それ以外の期間なら、0 を返す というような事をしたいです。 DECODE関数がIF関数と似ているように思いますが、Between~And~ や、不等号での分岐が出来ないようなので困っています。 IIFやIF のように分岐条件を自由に設定できて、入れ子も出来るよ うな関数があれば教えてください。 よろしくお願いいたします!

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

  • ベストアンサー
回答No.2

#1回答者です。 CASE式は、Oracle8iでサポートされているようです。 >SELECT (case when [T$QTY] > 100 then [T$QTY] else 0 end as 数量) FROM T_Sample A そうですね。 select case when 列名1>100 then 列名2 else 0 end as 名前 from 表名 といった指定が可能です。 ()は、この場合、必要ありません。指定しても文法エラーにはならないでしょうけどね。 []は、$という特殊記号を使っているから、指定しているのでしょうか?[]は、ACCESSやSQL Serverなど、マイクロソフトの独自仕様だと承知しています。Oracleや標準SQLの場合は、「"」で囲みます。 <CASE式のマニュアル記載> http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_v1/server.102/B19201-01/expressions.html#2100

sabi0303
質問者

お礼

教えていただいた例文を元にSQLを作ってみて動作確認出来ました! Access/Excel関連書籍で扱っているSQLは基本的な構文の説明しか 書かれていないので、「Case」が使える事を知りませんでした。 (OracleやSQL Server上でしかそういう複雑な事は出来ないと思っ ていました) Case関数の使い方が分かって、今後の業務の幅も広がると思います。 本当にありがとうございました。

その他の回答 (1)

回答No.1

Oracleのバージョンは? 比較的最近のバージョンなら、CASE式がサポートされているはずです。 case when 条件 then 手配数 else 0 end [as 別名] といった構文で、条件には範囲条件などを指定できます。

sabi0303
質問者

補足

ご回答ありがとうございます。 OracleはAccess経由でしか接続できないので詳しい事は分からない のですが、「ORA92」というアプリケーションが入っているので、 おそらく Oracle9i ではないかと思います。 Case式は、Select句の所で使えば良いでしょうか。 例えば「T$QTY」が100以下の場合は0を返すというSQLを作りたい 場合、  SELECT (case when [T$QTY] > 100 then [T$QTY] else 0 end as 数量) FROM T_Sample A という感じでよろしいでしょうか? OracleやSQL ServerのSQLと、Access/Excel経由で使うSQLとでは 微妙に違うようで、ネットでもなかなか情報が見つからなくて困 っています。 よろしくお願いいたします。

関連するQ&A

  • IF関数ではなくIIF関数を使うのでしょうか?

    なぜアクセスのクエリでIF関数を使う時は エクセルのようにIF関数ではなくIIF関数を使うのでしょうか? アクセスのクエリで条件分岐をしたいときはIIFを使っています。

  • エクセルではIF関数なのにアクセスではIIF関数?

    なぜエクセルではIF関数なのにアクセスではIIF関数? IF関数はアクセスではIIF関数になりますが、 なぜ「I」が増えるのでしょうか? またIF関数はイフ関数と読みますが IIF関数は「イイフ」関数と読めばいいのでしょうか? よろしくお願い致します。

  • Access97のIIf関数について

    Access97のプログラミングで IIf関数について質問です。 sWK=IIf(a=1,IIf(b=1,か,き),い) のようにIIf関数の引数にさらに IIf関数を指定して使うことはできるのでしょうか?

  • Accessでのiif関数について

    はじめまして。 Microsoft Accessの関数についての質問です。 例えばクエリの「商品名」の値AをBに置き換えたい場合、 =iif([商品名]=A,B)とします。 また、商品番号1000~9999まであるとして、1000~1999を抽出したい場合は、Like "1*" もしくは、Between 1000 And 1999 とします。 この時に 商品番号1000~1999を一律1000と置き換えたい場合、クエリでやるとしたらどのようにすれば良いのでしょうか。 イメージ的には =iif([商品番号]="1*",1000)なのですが、「"1*"」の部分をどうやってもうまくいきません。 どなたか詳しい方いらっしゃいましたらお教え頂けないでしょうか。 お忙しいところ申し訳ございませんが、宜しくお願い致します。

  • アクセスIIF関数

    はじめまして。ACCESSのif関数について教えてもらいたいことがあります。 dataAの数値に対して、目標数80をこえればその数値分に10を乗算し、未達であれば、0を返すという条件式を行いたいのですが、うまくいきません。以下、自分がやっていたデータを記載します。 テーブル例 dataA 70 80 60 90 クエリ条件式 式1:IIF([dataA]>80,"([dataA]-80)*10","0") 未達については0が返るのですが、超えた場合(真の時)([dataA]-80)*10の式が表示されています。うまく計算させるには、どうしたらよいのでしょうか。ご教授よろしくお願いします。

  • Access:IIf関数について

    Accessの関数の記入方法について教えてください。 テーブルで2つの日付が入っています。 形式はyyyy/mm/ddの日付型です。 日付Aと日付Bとして、同じ日付が入っているかもしくは日付Aの方が古い日付が入っています。 IIfで判定を入れたいのですが、同日もしくはAから1か月以内にBの日付が入っていたら、〇としたいです。 全体像がわかりにくく申し訳ないのですが、何かヒントをいただければ助かります。 よろしくお願いいたします。

  • Accessでの関数

    Access2002を利用しています。 Accessのクエリの中で、関数を利用し、例○○(条件)ならばAと表示し、そうでなければBとしなさいみたいな条件判断するような問題がありました。 私はIIF関数で求めたのですが、答えを見るとSwitch関数というのが使われていました。Switch関数というのがわからずに、Accessのヘルプで探そうとしたんですがん、表示してくれません。 この2つの関数 Switch関数とIIF関数の違いがわかりません。 出来れば、わかりやすく噛み砕いた表現で教えていただけませんでしょうか?

  • access2000でのiifを使う条件で

    削除クエリを実施する際にフォームでテキスト16からテキスト18って感じで日付を入力して削除しています。テキスト16に何も入力しない時は2000/01/01からテキスト18までとなるようにしたくてクエリの抽出条件に IIf([Forms]![F_A]![テキスト16]="", Between #2000/01/01# And [Forms]![F_A]![テキスト18],Between [Forms]![F_A]![テキスト16] And [Forms]![F_A]![テキスト18]) って入れたのですが上手く動きません。 何か根本的に間違ってたりした。よろしくお願いします。

  • クエリの一つのフィールドのIIF関数の限界は14個ですか?

    アクセス2003のクエリで たくさんの条件があり IIf(テーブル名!フィールド名,"正",IIf(・・・ と言う風に、IIF関数を14個までなら正常に動くのですが 15目になると「式が複雑すぎます」となってしまいます。 IIF関数の限界は14個なのでしょうか?

  • ACCELのIIF関数の条件設定方法について

    ACCELのIIF関数で、空白のフィールドを条件に指定する方法を教えてください。 EXCELの場合なら、「=if(A1="",B1,C1)」というようにA1フィールドが空白の時は、B1の値をとるというようにしたいのです。