Предполагая, что вам нужно пять дополнительных случайных записей, вы можете сделать:
select t.*
from (select t.*,
row_number() over (partition by cpid,
(case when cper >= 40 then 1 else 2 end)
order by dbms_random.value
) as seqnum
from t
) t
where seqnum <= 5 or cper >= 40;
row_number()
перечисляет строки для каждого cpid
в двух группах на основена значение cper
.Внешний where
принимает все значения cper
в нужном диапазоне, а также пять из другой группы.