我想知道按 sequence_within_parent 列对层次结构查询中的子项进行排序的 Oracle SQL 查询。
示例数据集和查询是:
create table tasks (task_id number
,parent_id number
,sequence_within_parent number
,task varchar2(30)
);
insert into tasks values ( 1, NULL, 0, 'Task 1');
insert into tasks values ( 2, 1, 1, 'Task 1.1');
insert into tasks values ( 3, 1, 2, 'Task 1.2');
insert into tasks values ( 4, 2, 2, 'Task 1.1.2');
insert into tasks values ( 5, 3, 1, 'Task 1.2.1');
insert into tasks values ( 6, 2, 1, 'Task 1.1.1');
insert into tasks values ( 7, 3, 4, 'Task 1.2.4');
insert into tasks values ( 8, 3, 2, 'Task 1.2.2');
insert into tasks values ( 9, 3, 3, 'Task 1.2.3');
insert into tasks values (10 , 2, 3, 'Task 1.1.3');
column task format a30
select task_id
,sequence_within_parent
,lpad(' ', 2 * (level - 1), ' ') || task task
from tasks
connect by parent_id = prior task_id
start with task_id = 1
/
此查询返回以下内容:
TASK_ID SEQUENCE_WITHIN_PARENT TASK
---------- ---------------------- ---------------
1 0 Task 1
2 1 Task 1.1
4 2 Task 1.1.2
6 1 Task 1.1.1
10 3 Task 1.1.3
3 2 Task 1.2
5 1 Task 1.2.1
7 4 Task 1.2.4
8 2 Task 1.2.2
9 3 Task 1.2.3
首选输出低于子项顺序正确的位置:
TASK_ID SEQUENCE_WITHIN_PARENT TASK
---------- ---------------------- ---------------
1 0 Task 1
2 1 Task 1.1
6 1 Task 1.1.1
4 2 Task 1.1.2
10 3 Task 1.1.3
3 2 Task 1.2
5 1 Task 1.2.1
8 2 Task 1.2.2
9 3 Task 1.2.3
7 4 Task 1.2.4