Masalah ini sebenarnya terlihat lebih sederhana daripada jawaban atas pertanyaan yang Anda tautkan, yang merupakan solusi yang sangat baik untuk masalah itu. Namun demikian, ini menggunakan kueri hierarkis yang sama, dengan connect by
Jika itu masalahnya priority
selalu merupakan urutan angka yang berkesinambungan, ini akan berhasil
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
Namun, jika itu tidak selalu benar, kami memerlukan row_number()
untuk menentukan urutan berdasarkan urutan prioritas ( yang tidak perlu bilangan bulat berurutan)
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