используя IN, где с помощью оператора case - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь создать этот запрос для отчета, '& BO_STATUS' = 'AAA' - это значение, которое пользователь должен ввести. Когда значение AAA, я хочу получить все BO со статусом In Progress и Confirmed. По какой-то причине я продолжаю получать ошибку. Я пытался сделать это по-разному.

SELECT T1.OPPORTUNITY_NO AS BO_NUMBER,
T1.SOURCE_ID_DB AS SOURCE_ID, 
T1.OPPORTUNITY_TYPE,
T1.STATE AS Status
FROM BUSINESS_OPPORTUNITY T1
WHERE
T1.STATE IN
(CASE
  WHEN '&BO_Status' = 'AAA' THEN '''In Progress','Confirmed'''
  END
)

Ответы [ 3 ]

3 голосов
/ 21 января 2020

Не используйте case ВЫРАЖЕНИЕ. Просто используйте обычные логи c:

WHERE '&BO_Status' = 'AAA' AND T1.STATE IN ('In Progress', 'Confirmed') 

Я полагаю, что вы также хотите "другое", поэтому запрос возвращает что-то, если условие не выполняется. Если это так, то вы хотите:

WHERE ('&BO_Status' = 'AAA' AND T1.STATE IN ('In Progress', 'Confirmed')) OR
      '&BO_Status' <> 'AAA'
1 голос
/ 21 января 2020

Если вам явно сказано использовать оператор case..when, вам следует использовать следующее:

WHERE case when '&BO_Status' = 'AAA' 
           Then case when T1.STATE IN ('In Progress', 'Confirmed')
                Then 1
                End
           Else 1
           End = 1

Или же лучший способ сделать это - вообще не использовать оператор case..when, как предложено @ Гордон.

WHERE ('&BO_Status' = 'AAA' AND T1.STATE IN ('In Progress', 'Confirmed')) OR
      '&BO_Status' <> 'AAA'

Я считаю, что когда статус не AAA, то вы хотите все (без условия where)

Приветствия !!

0 голосов
/ 21 января 2020

Вы можете максимально использовать функцию INSTR для этого сценария. Особенно, когда вы пытаетесь построить свои условия строки.

SELECT T1.OPPORTUNITY_NO AS BO_NUMBER,
T1.SOURCE_ID_DB AS SOURCE_ID, 
T1.OPPORTUNITY_TYPE,
T1.STATE AS Status
FROM BUSINESS_OPPORTUNITY T1
WHERE INSTR('In Progress, Confirmed', T1.STATE, 1, 1) > 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...