Я понял, что вы хотите сохранить PIECE_DEFECT_NUM_ID
в строках с IS_MAIN_DEFECT = 'Y'
и получить значение MIN
для неосновных строк дефекта.
Простейшее решение для в случае есть только одна строка на PIECE_ID
с IS_MAIN_DEFECT = 'Y'
- вы группируете PIECE_ID, IS_MAIN_DEFECT
и вычисляете min(PIECE_DEFECT_NUM_ID)
, что отлично MIN
для одной группы строк равно исходному значению
select PIECE_ID,IS_MAIN_DEFECT,
min(PIECE_DEFECT_NUM_ID) PIECE_DEFECT_NUM_ID
from tab
group by PIECE_ID, IS_MAIN_DEFECT
order by 1,2 desc;
В случае, если у вас может быть больше строк (тот же PIECE_ID) с основным флагом, просто выберите их разгруппированными и добавьте сгруппированные не- основная часть с использованием UNION ALL
select PIECE_ID,IS_MAIN_DEFECT,PIECE_DEFECT_NUM_ID
from tab
where IS_MAIN_DEFECT = 'Y'
UNION ALL
select PIECE_ID,IS_MAIN_DEFECT,
min(PIECE_DEFECT_NUM_ID) PIECE_DEFECT_NUM_ID
from tab
where nvl(IS_MAIN_DEFECT,'N') != 'Y'
group by PIECE_ID, IS_MAIN_DEFECT