Случайное выражение прекращает оценивать термины, как только находит совпадение. Поэтому я думаю, что вы задаете не тот вопрос. Не похоже, что вам действительно нужно выражение падежа.
Из ваших выборочных данных и результатов вы, кажется, хотите получить агрегат, используя first
, что-то вроде:
select dt1.company_id,
max(dt1.unique_entry_id)
keep (dense_rank first order by dt1.rating_number) as unique_entry_id
from comp_results dt1
group by dt1.company_id;
COMPANY_ID UNIQUE_ENTRY_ID
-------------------- --------------------
Org00001 ENTRY_C1_1
Org00002 ENTRY_C2_2
Org00003 ENTRY_C3_3
Это все равно оценивает каждую строку, но затем агрегирует и сохраняет тот, который имеет самый низкий rating_number
- который соответствует порядку приоритета, который вы хотите.
После вашего редактирования, если номера рейтинга не в числовом порядке, вы можете добавить выражение случая обратно в предложение order by
, чтобы указать желаемый порядок:
select dt1.company_id,
max(dt1.unique_entry_id) keep (dense_rank first
order by case dt1.rating_number
when 2 then 1
when 1 then 2
when 3 then 3
end) as unique_entry_id
from comp_results dt1
group by dt1.company_id;
Вы также можете использовать || вместо Or () или Disjunction ().