Ce problème semble en fait plus simple que la réponse à la question que vous avez liée, ce qui est une excellente solution à ce problème. Néanmoins, cela utilise les mêmes requêtes hiérarchiques, avec connect by
Si c'est le cas que priority
est toujours une séquence continue de nombres, cela fonctionnera
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
Cependant, si ce n'est pas toujours vrai, nous aurions besoin de row_number()
pour définir la séquence en fonction de l'ordre de priorité (qui n'a pas besoin d'être un entier consécutif)
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