Este problema en realidad parece más simple que la respuesta a la pregunta que vinculó, que es una excelente solución para ese problema. Sin embargo, esto usa las mismas consultas jerárquicas, con connect by
Si es el caso que priority
es siempre una secuencia continua de números, esto 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
Sin embargo, si eso no siempre es cierto, requeriríamos row_number()
para definir la secuencia según el orden de prioridad (que no necesita ser un número entero 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