Я понимаю ваш вопрос как проблему пробелов и островков, когда вы хотите сгруппировать смежные строки, имеющие одинаковые gid
до pid
значения 0
.
Вот один способ решить это с помощью суммы окна для определения групп: в основном, новый остров запускается каждый раз, когда встречается pid 0
. Остальное просто агрегация:
select
gid,
min(seq) seq,
listagg(items, ',') within group(order by seq) items
from (
select
t.*,
sum(case when pid = 0 then 1 else 0 end) over(partition by gid order by seq) grp
from mytable t
) t
group by gid, grp
order by gid, grp