Ответ @srinu nivas может быть удовлетворительным, но есть 2 проблемы: Условие if (l_agg_cnt <= 110000 или l_agg_cnt> = 110000) всегда будет возвращать True (если l_agg_cnt не равен нулю).Также там курсор предполагает, что есть одна строка для каждого местоположения.Это, однако, не ясно из описания.Чего не хватает, вы бы хорошо сделали обзор раздела справки How_to_Ask .
Хотя PL / SQL в целом способен, лучше позволить SQL выполнять тяжелую работу - как можно большую часть работы.В этом случае возможно одно утверждение.Он объединяет слияние с рекурсивным CTE.(Примечание. Для каждого местоположения не требуется отдельной строки.)
merge into sku
using (with loc as
--- get location and total stock count ordering by total and gererate id
( select location, stock_count, rownum row_id
from (select location, stock_count
from (select location, sum(stock_count) stock_count
from sku
group by location
)
order by stock_count desc
)
)
-- Build recursive CTE
, grp (location,stock_count,group_count,grp,row_id ) as
-- Starting with id =1 from loc cte above and setting grp = 1
( select location,stock_count,stock_count,1,row_id
from loc
where row_id = 1
-- now join each row 2-n from loc above and determining total stock for the group and assigning grp
union all
select loc.location,loc.stock_count
-- update grp and reset group total stock
, case when grp.group_count > 110000 then loc.stock_count else grp.group_count + loc.stock_count end
, case when grp.group_count > 110000 then grp.grp+1 else grp.grp end
, loc.row_id
from grp join loc on grp.row_id+1 = loc.row_id
)
-- finally extract location and its assigned group
select location, grp from grp) grp_set
-- identify location and set grp (note updates all rows for location)
on (grp_set.location = sku.location)
when matched then
update set grp = grp_set.grp;
--- Результаты
выберите отдельное местоположение, stock_count, grp, sum (stock_count) over (разбиение по grp) из(выберите местоположение, grp, sum (stock_count) stock_count из sku, где grp не является нулевым, сгруппируйте по местоположению, grp) упорядочите по grp, location
;
К сожалению, я не смог проверить ваши данные, поскольку они не были представлены в виде текста.Удачи