Dieses Problem sieht tatsächlich einfacher aus als die Antwort auf die von Ihnen verlinkte Frage, die eine hervorragende Lösung für dieses Problem darstellt. Trotzdem verwendet dies dieselben hierarchischen Abfragen mit connect by
Wenn es der Fall ist, dass priority
ist immer eine fortlaufende Zahlenfolge, das geht auch
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
Wenn dies jedoch nicht immer der Fall ist, benötigen wir row_number()
um die Reihenfolge basierend auf der Prioritätsreihenfolge zu definieren (die keine fortlaufende ganze Zahl sein muss)
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