- - PR -
ORACLEのDECODE関数について教えて下さい
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2005-04-22 20:01
ORACLEの初心者です。
今回、データベースとしてORACLE9iを使用しております。 そこで、テーブルの項目として以下の項目がある場合 ・発注数1 ・発注数2 ・納入数1 ・納入数2 下記の判断を行いたいのですが、DECODE関数でできるのでしょうか? 発注数1<=納入数1 AND 発注数2<=納入数2の時、文字列の「完了」 発注数1>納入数1 OR 発注数2>納入数2の時、文字列の「残」 をSELECTする。 ORACLEの熟練者の方、ご教示いただけますようお願いします [ メッセージ編集済み 編集者: いち 編集日時 2005-04-22 20:02 ] |
|
投稿日時: 2005-04-22 21:30
このような場合、SIGN 関数を使用します。
SIGN 関数は、次のような値を返します。 ・正の引数:1 ・0 の引数:0 ・負の引数:1 従って、下記のように書けばご希望の結果が得られると思います。 DECODE( SIGN("発注数1"-"納入数1"), 1, '残', DECODE( SIGN("発注数2"-"納入数2"), 1, '残', '完了' ) ) ただ、9i とのことですので、CASE を使用した方が分かりやすくて 良いのではないかと思います。 |
|
投稿日時: 2005-04-25 11:10
CASE
WHEN 発注数1<=納入数1 AND 発注数2<=納入数2 THEN '完了' ELSE '残' END で問題ないと思いますが。最近のOracleはSQL標準をどんどんと取り入れていますので、 古いDECODEやNVL等はなるべく使わないようにするのがベターだと思いますよ。 |
|
投稿日時: 2005-04-25 12:36
CASE文を使用することで、if elseif elseの判断が簡単にでき
ることを理解しました。 おいちゃん様、あんとれ様、ご教示ありがとうございました。 [ メッセージ編集済み 編集者: いち 編集日時 2005-04-25 12:36 ] |
|
投稿日時: 2005-04-25 13:05
そのプロジェクトからの脱出をおすすめします。
そんな正規化もされていない、発注と納入のエンティティ がごっちゃになっているデータモデルを見るだけで 危うさをビンビン感じちゃいます。 |
1
