Vous semblez vouloir quelque chose comme 1 de plus que la somme cumulée des parties. La méthode la plus simple est :
select t.*,
(case when part = 1 then 0 -- the easy case
else 1 + sum(part) over (order by id)
end) as number
from t;
Si part
peut prendre des valeurs autres que 0 et 1 :
select t.*,
(case when part = 1 then 0 -- the easy case
else 1 + sum( (part = 1)::int ) over (order by id)
end) as number
from t;