Я просмотрел некоторые из вопросов, заданных уже по этому вопросу, но никто не ответил на мои вопросы.sql - проблемы с условным предложением WHERE с оператором CASE
У меня есть таблица, где столбец может содержать цифры и аннулирует
В зависимости от ид я представляемого в моей хранимой процедуре, я либо должен выбрать, где идентификаторы равны нулю или совпадают идентификатор или все из них.
Вот что у меня есть, но оно не работает.
pi_region_id = 51 означает, что мне нужно все hrcc_id = нуль
pi_region_id не 51 или 52, то hrcc_id = pi_region_id
еще (это означает, что это 52), вернуть им все
SELECT i.indicator_id AS ID,
i.indicator_name_en AS name_en,
h.region_code
FROM indicators i
JOIN hrcc h ON h.hrcc_id = i.hrcc_id
WHERE (CASE WHEN pi_region_id = 51 THEN i.hrcc_id IS NULL
WHEN pi_region_id != 51 OR pi_region_id != 52 THEN i.hrcc_id := pi_region_id
ELSE NULL END)
ORDER BY i.hrcc_id ASC
Oracle дает мне «ORA-00905: недостающее ключевое слово» с ошибкой, кажущейся на i.hrcc_id IS NULL.
Я все еще очень новичок в pl/sql, поэтому любая помощь будет принята с благодарностью.
Спасибо!
UPDATE
Пример из моих таблиц
ПОКАЗАТЕЛИ
INDICATOR_ID | INDICATOR_NAME_EN | HRCC_ID
1 | Что-то | (null)
2 | Другое | 1
3 | Снова | 2
HRCC
HRCC_ID | REGION_CODE
1 | QC
2 | ON
(извините ... не мог заставить его выглядеть лучше)
Что мне нужно, когда:
pi_region_id = 51, чтобы вернуть только те строки, в которых ПОКАЗАТЕЛЕЙ HRCC_ID IS NULL
pi_region_id = 52 для возврата Eveything
pi_region_id = 1, например, для возврата строк на INICATORS где HRCC_ID = 1
Благодарим вас за ответ. Это почти работает. Единственное условие, которое не работает, второе - «(pi_region_id = 51 и i.hrcc_id равно null)», когда я добавляю 51 для входного параметра pi_region_id, он должен возвращать 6 строк, но не возвращает никаких. – Karinne
Тогда в других частях запроса должны быть проблемы. Если вы можете показать репрезентативную выборку своих таблиц, мы можем устранить ее. – mathguy
Например: некоторые hrcc_id могут быть отклонены условием соединения, прежде чем вы перейдете к предложению where. – mathguy