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

Access2002からADO経由でOracleに接続し、データを取得しようと
思っています。
AccessのクエリやExcel関数では、「IIF」、「IF」で条件分岐が出
来ますが、SQLでこれに相当する関数はありますか?
具体的には、

  ・日付A が 2007/08/01 ~ 本日 の間なら、「手配数」フィー
ルドの数字を返す
  ・日付Aが それ以外の期間なら、0 を返す

というような事をしたいです。
DECODE関数がIF関数と似ているように思いますが、Between~And~
や、不等号での分岐が出来ないようなので困っています。
IIFやIF のように分岐条件を自由に設定できて、入れ子も出来るよ
うな関数があれば教えてください。
よろしくお願いいたします!

A 回答 (2件)

Oracleのバージョンは?



比較的最近のバージョンなら、CASE式がサポートされているはずです。

case when 条件 then 手配数
else 0
end [as 別名]

といった構文で、条件には範囲条件などを指定できます。

この回答への補足

ご回答ありがとうございます。
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とでは
微妙に違うようで、ネットでもなかなか情報が見つからなくて困
っています。
よろしくお願いいたします。

補足日時:2007/08/07 10:05
    • good
    • 0

#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/or …
    • good
    • 0
この回答へのお礼

教えていただいた例文を元にSQLを作ってみて動作確認出来ました!

Access/Excel関連書籍で扱っているSQLは基本的な構文の説明しか
書かれていないので、「Case」が使える事を知りませんでした。
(OracleやSQL Server上でしかそういう複雑な事は出来ないと思っ
ていました)

Case関数の使い方が分かって、今後の業務の幅も広がると思います。
本当にありがとうございました。

お礼日時:2007/08/07 11:06

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す