Чтобы получить такой результат, вам, похоже, нужно на MIN
больше, чем COUNT
; с вашими данными, это
select product, min(status), data_product_specific_to_keep
from yourtable
group by product, data_product_specific_to_keep
дает:
A NOT_OK AAA
B OK BBB
C NOT_OK CCC
Если вам нужно обработать более двух значений, вы должны определить логику приоритетов; Вы можете реализовать это следующим образом:
select PRODUCT,
case (status)
when 2 then 'NOT_OK'
when 1 then 'AWAIT'
else 'OK'
end,
DATA_PRODUCT_SPECIFIC_TO_KEEP
from (
select min(
case (status)
when 'NOT_OK' then 2
when 'AWAIT' then 1
else 0
end
) as status,
PRODUCT, DATA_PRODUCT_SPECIFIC_TO_KEEP
from yourTable
group by PRODUCT, DATA_PRODUCT_SPECIFIC_TO_KEEP
)
order by 1
С такой таблицей
create table yourTable (PRODUCT, STATUS, DATA_PRODUCT_SPECIFIC_TO_KEEP) as (
select 'A', 'NOT_OK', 'AAA' from dual union all
select 'A', 'OK', 'AAA' from dual union all
select 'B', 'OK', 'BBB' from dual union all
select 'B', 'AWAIT', 'BBB' from dual union all
select 'B', 'OK', 'BBB' from dual union all
select 'C', 'NOT_OK', 'CCC' from dual union all
select 'C', 'AWAIT', 'CCC' from dual union all
select 'D', 'NOT_OK', 'DDD' from dual union all
select 'D', 'NOT_OK', 'DDD' from dual
)
результат будет
P CASE(S DAT
- ------ ---
A OK AAA
B OK BBB
C AWAIT CCC
D NOT_OK DDD