Я понимаю, что это своего рода проблема пробелов и островов. Вы можете использовать оконные функции следующим образом:
select *
from (
select no, order, type, prodNo, sum(price) over(partition by grp) price
from (
select
t.*,
sum(case when type = 'Product' then 1 else 0 end)
over(partition by orderNo order by no) grp
from mytable t
) t
) t
where type = 'Product'
Самый внутренний запрос использует сумму окон для определения групп записей. Каждый раз, когда встречается запись о продукте, начинается новая группа. Промежуточный запрос суммирует цены в каждой группе. Наконец, самые внешние запросы фильтруют только записи о продуктах.