Вы можете использовать аналитическую функцию следующим образом:
Select promo, flag
from (Select promo, flag,
row_number()
over (partition by promo order by upper(flag) desc nulls last) as rn
From your_table)
Where rn=1;
Вы также можете использовать группирование по, но это ограничит вас в выборе других столбцов из таблицы.
select promo, max(upper(flag)) from table
group by promo
Кроме того, в группе по запросу он будет нечувствителен к регистру, поэтому я рекомендую использовать аналитическую функцию.
Cheers !!