Таблицы SQL представляют неупорядоченные множества. Ваше назначение, кажется, зависит от порядка строк. Для того, чтобы делать то, что вы хотите, вам нужен столбец заказа.
Если он у вас есть, вы можете использовать методы пробелов и островков и обновляемые CTE:
with toupdate as (
select t.*,
row_number() over (partition by group, seqnum - seqnum_g order by <ordering col>) as new_itemno
from (select t.*,
row_number() over (order by <ordering col>) as seqnum,
row_number() over (partition by group order by <ordering col>) as seqnum_g
from t
) t
)
update toupdate
set itemno = new_itemno;