Ситуация или подзапрос? - PullRequest
1 голос
/ 27 сентября 2019

Я написал запрос на выборку, но мне нужно отфильтровать свой результат, только если он удовлетворяет определенным критериям, кроме тех, которые я все еще хочу видеть оставшимися.

Я пытался включить, где (случай, когда x = y и a = b, то = 1, иначе 0 end) = 1, но это возвращает данные, которые я не хочу включать.

 gl.col1,
 gl.col2,
 gl.voucher_type,
 gl.reference_serie Reference_Series,
 .
 .
 .
from table1 gl

where (case 
         when gl.voucher_type = '0' and gl.reference_serie='PUR ORDER' 
                  then 1 ELSE 0 end) =1

Причина в том, что если вы посмотрите на код, я хочу исключить все, что относится к типу ваучера 0, а ссылочная серия - "PUR ORDER", но давайте предположим, что есть тип ваучера 0, но другойСсылка серии Я хочу это увидеть.Я знаю, что в моем случае есть = вместо <>, но это для демонстрации того, что я пытаюсь найти, чтобы исключить его.

У меня нет каких-либо ошибок, я просто не уверен в следующих шагах, и если утверждение CASE является правильным подходом.Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Как правило, вы хотите избегать выражений case в предложении where.Вот две простые альтернативы:

where not (gl.voucher_type = '0' and gl.reference_serie = 'PUR ORDER')

where gl.voucher_type <> '0' or gl.reference_serie <> 'PUR ORDER'

Обратите внимание, что они отфильтровывают значения NULL, чего нет в вашей форме.Логика может быть легко отрегулирована, если столбцы имеют значения NULL.

0 голосов
/ 27 сентября 2019

Вам не нужно case-when:

 gl.col1,
 gl.col2,
 gl.voucher_type,
 gl.reference_serie Reference_Series,
 .
 .
 .
from table1 gl

where gl.voucher_type = '0' and gl.reference_serie='PUR ORDER' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...