お世話になります。
ORACLEは初心~中級レベルぐらいだと思うのですが、
次のことが実現できません。
ネットで検索し、関連サイトの説明を見てもさっぱりなので知っている方は即回答できるとおもわれますので教えてください。
[やりたいこと]
TABLEから入力IN( :IN )が1のときにT.COL1 = '100'
2のときにT.COL1 != '100'
という条件の下でSELECTしたい。
SELECT
*
FROM
TABLE T
WHERE
☆ここ☆
上記の☆ここ☆の部分の具体例を教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
関数もあると思いますが、基本的な構文で。。。
SQL
1where (:IN = 1 and T.COL1 = '100') or (:IN = 2 and T.COL1 != '100')
投稿2016/03/17 11:09
総合スコア2883
0
私なら次のように書きます。
SQL
1SELECT * 2FROM T 3WHERE 1 = 4 CASE 5 WHEN :Nyuryoku = 1 THEN decode(T.COL1, '100', 1, 0) 6 WHEN :Nyuryoku = 2 THEN decode(T.COL1, '100', 0, 1) 7 ELSE NULL 8 END;
※バインド変数を:INとすると、「ORA-01745: ホスト/バインド変数名が無効です。」が発生するため、
ここでは:Nyuryokuとしました。
WHERE 1 =
としているのは結果が1であればTrue、そうでなければFalseと判断させるためです。
判断はそれ以下のCASE WHENで表現します。
WHEN :Nyuryoku = 1 THEN decode(T.COL1, '100', 1, 0)
の行は:Nyuryoku = 1の時はdecodeでT.COL1の値を判定します。
T.COl1が'100'であれば1(True)を、そうでなければ0を返します。
WHEN :Nyuryoku = 2 THEN decode(T.COL1, '100', 0, 1)
の行は1つ目のWHENとは逆にT.COL1の値が'100'の場合に0を、そうでなければ1を返します。
ELSE NULL
この行はもし:Nyuryokuが1または2以外の値が指定された部分の対処をする部分です。
1または2以外ではNULLを返していますので1 = Nullの結果はTrueでもFalseでもないUnknownとなり、
検索対象になりません。
投稿2016/03/18 01:00
総合スコア345
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/03/18 02:34 編集
2016/03/18 03:21
2016/03/18 09:43
退会済みユーザー
2016/03/18 11:00 編集
2016/03/18 11:42
2016/03/19 16:51
2016/03/19 21:46 編集
2016/03/22 04:40
2016/03/23 04:13
2016/04/04 05:44
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/18 09:54