Ten problem w rzeczywistości wygląda na prostszy niż odpowiedź na pytanie, które połączyłeś, co jest doskonałym rozwiązaniem tego problemu. Niemniej jednak używa tych samych zapytań hierarchicznych, z connect by
Jeśli tak jest, priority
jest zawsze ciągłą sekwencją liczb, to zadziała
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
Jeśli jednak nie zawsze tak jest, wymagalibyśmy row_number()
aby zdefiniować sekwencję na podstawie kolejności priorytetów (która nie musi być kolejnymi liczbami całkowitymi)
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