Dette problem ser faktisk enklere ud end svaret på det spørgsmål, du linkede til, hvilket er en glimrende løsning på det problem. Ikke desto mindre bruger dette de samme hierarkiske forespørgsler med connect by
Hvis det er tilfældet, at priority
er altid en kontinuerlig række af tal, vil dette virke
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
Men hvis det ikke altid er sandt, vil vi kræve row_number()
at definere sekvensen baseret på prioritetsrækkefølgen (som ikke behøver at være et fortløbende heltal)
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