случай, когда тогда IN - PullRequest
       9

случай, когда тогда IN

0 голосов
/ 13 декабря 2018

код ниже не работает, пожалуйста, сообщите.

SELECT *
 FROM TBL_REASON_MAP A
WHERE case when V_ID = 3 then 'A' else to_char(a.type_id) end IN
      case when V_ID = 3 then 'A' else '(2,3)' end;

ниже - ОК:

SELECT *
  FROM TBL_REASON_MAP A
 WHERE case when  V_ID = 3 then 'A' else to_char(a.type_id) end IN
       case when  V_ID = 3 then 'A' else '2' end;

примечание: V_ID - это переменная, для которой передается значение в блоке plsql.Если V_ID = 3, он вернет все доступные данные, но если это не так, он вернет данные только с a.type_id только в (2,3).

например, V_ID = 4

введите описание изображения здесь

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Пока что решение, которое я получил, находится ниже:

Declare

    V_ID number;

begin

    V_ID := 4;

    SELECT *
      FROM TBL_REASON_MAP A
     WHERE case when V_ID = 3 then 'A' else to_char(a.type_id) end >=
           case when V_ID = 3 then 'A' else '2' end
       and case when V_ID = 3 then 'A' else to_char(a.type_id) end !=
           case when V_ID = 3 then 'A' else '0' end;

END;
0 голосов
/ 13 декабря 2018

Простейшая логика:

WHERE ( V_ID = 3 OR a.type_id IN (2, 3) );

Нет необходимости в выражении CASE.

0 голосов
/ 13 декабря 2018

Предположительно a.type_id содержит значения, такие как 2, 3, 4 и т. Д. Первая case() возвращает строку из (2,3).Это одно значение, поэтому IN становится тестом на равенство.2 не равно '(2,3).Поэтому первый код не работает.Тогда как второй case() возвращает единственное значение 2, которое может быть сопоставлено со значением в a.type_id.


"в любом случае, если V_ID = 3, то он вернет все доступные данные, но если это не так, он вернет данные с a.type_id в (2,3) "

Как прокомментировали другие люди, это легко реализовать с помощью регулярных логических операций без необходимости case() вообще:

SELECT *
 FROM TBL_REASON_MAP A
WHERE V_ID = 3 
or (V_ID != 3 
    and a.type_id  IN (2,3));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...