#sql #oracle #case
#sql #Oracle #регистр
Вопрос:
Я хочу, чтобы приведенный ниже код в моем where condition: оператор условия выглядел так :
ЗА ОДИН ДЕНЬ ДО ОБНОВЛЕНИЯ В политике появилась новая независимая скидка (существует RAP16.DSCCD = ‘366’), А ПРИ ОБНОВЛЕНИИ Новая независимая скидка снижается (RAP16.DSCCD = ‘366’ отброшен)
Я попробовал приведенный ниже код
AND case when tt.ja2_effdt_t = rap01.hmedt_t - 1
then trim(RAP16.DSCCD) = '366'
when trim(rap01.hmedt_t) <> tt.ja2_effdt_t)
then trim(RAP16.DSCCD) <> '366'
end
В приведенном ниже коде есть некоторая синтаксическая ошибка, но я не могу ее исправить.
Комментарии:
1. Обычно лучше использовать конструкции AND / OR вместо выражений case в предложении WHERE .
2. @jarlh можете ли вы помочь мне, как преобразовать приведенный выше код в И / ИЛИ форму? Спасибо!
Ответ №1:
Обычно лучше использовать AND
OR
конструкции / вместо case
выражений в WHERE
предложении. Вы, вероятно, хотите что-то вроде:
AND ((tt.ja2_effdt_t = rap01.hmedt_t - 1 AND trim(RAP16.DSCCD) = '366')
AND
(trim(rap01.hmedt_t) <> tt.ja2_effdt_t AND trim(RAP16.DSCCD) <> '366'))
Комментарии:
1. Я хочу, чтобы оба условия выполнялись одновременно, так зачем нам нужно использовать ИЛИ здесь? Спасибо!
2. Я переключусь на И . (В то время ваше выражение case выполняло только одно условие. Теперь вы видите, почему AND / OR лучше!)
3. Спасибо за ценное предложение, не могли бы вы также рассказать, почему у меня возникла синтаксическая ошибка в операторе CASE.
4. Как указал @ch2019, у вас есть непревзойденный
)
в концеwhen trim(rap01.hmedt_t) <> tt.ja2_effdt_t)
.5. И случай, когда tt.ja2_effdt_t = rap01.hmedt_t — 1 затем trim(RAP16.DSCCD) = ‘366’ когда rap01.hmedt_t <> tt.ja2_effdt_t затем trim(RAP16.DSCCD) <> ‘366’ end , если я использую это, синтаксическая ошибка все равно есть, и она ввторая строка «затем обрезать (RAP16.DSCCD) = ‘366’».