Na verdade, esse problema parece mais simples do que a resposta para a pergunta que você vinculou, o que é uma excelente solução para esse problema. No entanto, isso usa as mesmas consultas hierárquicas, com
connect by
Se for o caso de
priority
é sempre uma sequência contínua de números, isso funcionará SELECT t.grp, level, ltrim(SYS_CONNECT_BY_PATH(state,','),',') as "set"
from t
start with priority = 1
connect by priority = prior priority + 1
and grp = prior grp
No entanto, se isso nem sempre for verdade, precisaríamos de
row_number()
para definir a sequência com base na ordem de prioridade (que não precisa ser um número inteiro consecutivo) with t2 AS
(
select t.*, row_number()
over ( partition by grp order by priority) as rn from t
)
SELECT t2.grp, ltrim(SYS_CONNECT_BY_PATH(state,','),',') as "set"
from t2
start with priority = 1
connect by rn = prior rn + 1
and grp = prior grp
DEMO