この問題は、実際には、リンクした質問への回答よりも単純に見えます。これは、その問題に対する優れた解決策です。それでも、これは同じ階層クエリを使用し、connect by
priority
の場合 は常に数列の連続であり、これは機能します
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
ただし、それが常に当てはまるとは限らない場合は、row_number()
が必要になります。 優先順位(連続した整数である必要はありません)に基づいてシーケンスを定義するには
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