CASEでORが正しく評価されない場合、記述の仕方が誤っている可能性があります。
以下のようなデータがあるとします。
flgは3種類あり、0と1⇒A、2⇒Bとして出力するとします。
id | flg |
1 | 1 |
2 | 1 |
3 | 0 |
4 | 2 |
1 2 3 4 5 6 7 8 |
SELECT flg ,CASE WHEN flg = 0 or 1 THEN 'A' WHEN flg = 2 THEN 'C' ELSE NULL END FROM hoge |
実行結果を見ると、すべてAになってしまっています。

正しくは以下のように、ORの後にも「flg = 1」とカラム名も記述します。
1 2 3 4 5 6 7 8 |
SELECT flg ,CASE WHEN flg = 0 or flg = 1 THEN 'A' WHEN flg = 2 THEN 'C' ELSE NULL END FROM hoge |
そうすると以下のように、正しく評価されます。

コメント