Boa tarde,
Você pode usar a função LAG para verificar o registro anterior e se é a mesma ordem de compra e com o mesmo valor.
https://docs.oracle.com/cd/B19306_01/se ... ons070.htm
Selecionar tudo
--tabela temporária
with temp_nf as(
select 02 NF, 33 OC, 2 VL, 1 ID from dual union all
select 03 NF, 33 OC, 2 VL, 2 ID from dual union all
select 04 NF, 33 OC, 2 VL, 3 ID from dual union all
select 05 NF, 55 OC, 5 VL, 4 ID from dual union all
select 06 NF, 55 OC, 5 VL, 6 ID from dual union all
select 06 NF, 55 OC, 5 VL, 7 ID from dual
)
--consulta na tabela temporária
select
nf,
oc,
vl,
id,
--campos adicionais para demonstração
LAG(oc, 1, 0) OVER (ORDER BY oc) oc_lag, --aqui pega a ordem de compra anterior
LAG(vl, 1, 0) OVER (ORDER BY oc) vl_lag, --aqui pega o valor da ordem de compra anterior
--Se o oc_lag for igual ao atual e se o vl_lag for igual ao atual, então é 0, senão é o vl atual
case
when LAG(oc, 1, 0) OVER (ORDER BY oc) = oc
and LAG(vl, 1, 0) OVER (ORDER BY oc) = vl then 0
else vl
end vl_novo
from
temp_nf