试试这个。它将为您提供行之间的依赖关系。如果您可以发布预期的输出,我很乐意调整答案以使其符合您的要求。
with aux (category, code) as(
select 'Section', 'A' from dual union all
select 'Division', '01' from dual union all
select 'Group', '011' from dual union all
select 'Class', '0111' from dual union all
select 'Class', '0112' from dual union all
select 'Division', '02' from dual union all
select 'Group', '021' from dual union all
select 'Class', '0211' from dual)
SELECT
a.*,
sys_connect_by_path(code, '>') hier
FROM
aux a
CONNECT BY
PRIOR decode(category, 'Section', 1, 'Division', 2, 'Group',
3, 'Class', 4, 5) = decode(category, 'Section', 1, 'Division', 2, 'Group',
3, 'Class', 4, 5) - 1;
输出:
Category Code Hier
--------------------
Section A >A
Division 01 >A>01
Group 011 >A>01>011
Class 0111 >A>01>011>0111
Class 0112 >A>01>011>0112
Class 0211 >A>01>011>0211
Group 021 >A>01>021
Class 0111 >A>01>021>0111
Class 0112 >A>01>021>0112
Class 0211 >A>01>021>0211
Division 02 >A>02
Group 011 >A>02>011
Class 0111 >A>02>011>0111
Class 0112 >A>02>011>0112
Class 0211 >A>02>011>0211
Group 021 >A>02>021
Class 0111 >A>02>021>0111
Class 0112 >A>02>021>0112
Class 0211 >A>02>021>0211
Division 01 >01
Group 011 >01>011
Class 0111 >01>011>0111
Class 0112 >01>011>0112
Class 0211 >01>011>0211
Group 021 >01>021
Class 0111 >01>021>0111
Class 0112 >01>021>0112
Class 0211 >01>021>0211
Division 02 >02
Group 011 >02>011
Class 0111 >02>011>0111
Class 0112 >02>011>0112
Class 0211 >02>011>0211
Group 021 >02>021
Class 0111 >02>021>0111
Class 0112 >02>021>0112
Class 0211 >02>021>0211
Group 011 >011
Class 0111 >011>0111
Class 0112 >011>0112
Class 0211 >011>0211
Group 021 >021
Class 0111 >021>0111
Class 0112 >021>0112
Class 0211 >021>0211
Class 0111 >0111
Class 0112 >0112
Class 0211 >0211