表结构是这样的
id  name   parent_id
1   name_1    null
2   name_2     1
3   name_3     null
4   name_4     1
5   name_5     3
6   name_6     1
7   name_7     3
8   name_8     4
9   name_9     2
10  name_10    1
     id为主键,其中parent_id取得是本表中的主键ID,可为空,为空表示最顶层,1表示主键为1的下一层,3表示在主键为3的下一层
     现在我须要把数据排序,首先第一条是一条主键为空的最顶层的数据,例如主键为1的,其次是parent_id是1的数据例如id等于2的,然后取parent_id为2的,如果没有则继续找parent_id为1的,依次类推
排序出来的样子如下:
1  name_1     null
2  name_2      1
9  name_9      2
4  name_1      1
8  name_8      4
6  name_6      1
10 name_10     1
3   name_3     null
5   name_5     3
7   name_7     3

解决方案 »

  1.   


    create table t1 (id number(5),name varchar2(10),p_id number(5));insert into t1 values (1,'name_1',null);
    insert into t1 values (2,'name_2',1);
    insert into t1 values (3,'name_3',null);
    insert into t1 values (4,'name_4',1);
    insert into t1 values (5,'name_5',3);
    insert into t1 values (6,'name_6',1);
    insert into t1 values (7,'name_7',3);
    insert into t1 values (8,'name_8',4);
    insert into t1 values (9,'name_9',2);
    insert into t1 values (10,'name_10',1);
    commit;
    select id,name,p_id
    from t1
    start with p_id is null
    connect by prior id = p_id
        id      name    p_id
    -------------------------------
    1 1 name_1
    2 2 name_2 1
    3 9 name_9 2
    4 4 name_4 1
    5 8 name_8 4
    6 6 name_6 1
    7 10 name_10 1
    8 3 name_3
    9 5 name_5 3
    10 7 name_7 3
      

  2.   

    至于空和null 如果想显示可以替换下
      

  3.   

    一楼的大哥还在不,这个sql语句转换成hql应该怎么写?