楼上的兄弟,按你的要求和你写出来的效果不符嘛?
应该是
aa
bb
才对啊?
还是我理解错误!?

解决方案 »

  1.   

    select [name] from test order by [name]
      

  2.   

    要求不对呀!
    如果要显示上面结果的SELECT * FROM Test ORDER BY name
    如果要显示parentid=0的记录然后依次显示parentid=id的记录的
    SELECT * FROM Test ORDER BY parentid
      

  3.   

    --创建一个辅助排序的函数
    create function f_sort()
    returns @re table(id int,sortid varchar(1000),level int)
    as
    begin
    declare @level int
    set @level=0
    insert into @re 
    select id,right('0000'+cast(id as varchar),4),0 
    from test where parentid=0
    while @@rowcount>0
    begin
    set @level=@level+1
    insert into @re 
    select a.id,b.sortid+','+right('0000'+cast(a.id as varchar),4),@level
    from test a join @re b on a.parentid=b.id
    where b.level=@level-1
    end
    return
    end
    go--调用自定义函数实现你的排序
    select a.* from test a join dbo.f_sort() b on a.id=b.id
    order by b.sortid
    go
      

  4.   

    --下面是测试--测试数据
    create table Test(id int,name varchar(10),parentid int)
    insert into Test
    select 1,'aa',0
    union all select 2,'bb',0
    union all select 3,'aa1',1
    union all select 4,'aa2',3
    union all select 5,'bb1',2
    union all select 6,'bb2',5
    go--创建一个辅助排序的函数
    create function f_sort()
    returns @re table(id int,sortid varchar(1000),level int)
    as
    begin
    declare @level int
    set @level=0
    insert into @re 
    select id,right('0000'+cast(id as varchar),4),0 
    from test where parentid=0
    while @@rowcount>0
    begin
    set @level=@level+1
    insert into @re 
    select a.id,b.sortid+','+right('0000'+cast(a.id as varchar),4),@level
    from test a join @re b on a.parentid=b.id
    where b.level=@level-1
    end
    return
    end
    go--调用自定义函数实现你的排序
    select a.* from test a join dbo.f_sort() b on a.id=b.id
    order by b.sortid
    go--删除测试环境
    drop table test
    drop function f_sort/*--测试结果
    id          name       parentid    
    ----------- ---------- ----------- 
    1           aa         0
    3           aa1        1
    4           aa2        3
    2           bb         0
    5           bb1        2
    6           bb2        5(所影响的行数为 6 行)
    --*/
      

  5.   

    select name from test order by name,parentid
      

  6.   

    这个其实是树形数据处理的一个应用实例而已:参考我的贴子:树形数据的处理
    http://expert.csdn.net/Expert/topic/2285/2285830.xml?temp=.7908594
      

  7.   

    你的name字段是不是有一定规律还是很随机的如果向aa,aa1,aa2,那楼上的就可以了如果是没有什么规律的话,等
      

  8.   

    zjcxc(祝大家新年快乐.邹建.共享果)的这个函数好,以后用的着
      

  9.   

    --测试环境
    declare @test table(id int,name char(10),parentid int)
    --测试数据
    insert @test
    select 1 ,'aa' ,0
    union all
    select 2 ,'bb' ,0
    union all
    select 3 ,'aa1' ,1
    union all
    select 4 ,'aa2' ,3
    union all
    select 5 ,'bb1' ,2
    union all
    select 6 ,'bb2'  ,5--实现
    declare @cs int
    set @cs = 0
    declare @tree table(id int,cs int,iid int)
    Insert @tree Values(0,0,0)
    While (@@ROWCOUNT >= 1)
    Begin
    select @cs = @cs + 1
    Insert @tree(id,CS,iid)
    Select a.id,@cs,
                    case when b.cs = 0 then a.id else b.iid end 
                    From @test a,@tree b
    Where a.parentid = b.id and b.CS = @cs - 1 and a.id <> a.parentid
    End--结果
    select t.name from @tree tr join @test t
    on tr.id = t.id and tr.cs > 0
    order by tr.iid,tr.cs/*
    name       
    ---------- 
    aa        
    aa1       
    aa2       
    bb        
    bb1       
    bb2       (所影响的行数为 6 行)
    */
      

  10.   

    参考联机帮助
    目录:访问和更改关系数据-》高级查询概念-》Transact-SQL窍门
      

  11.   

    表名:Test
    字段名:
    id name parentid
    1 aa 0
    2 bb 0
    3 aa1 1
    4 aa2 3
    5 bb1 2
    6 bb2 5
    我想先显示parentid=0的记录然后依次显示parentid=id的记录如显示下面效果:
    aa
    aa1
    aa2
    bb
    bb1
    bb2
    create table cc(id int,name char(10),parentid int)
    drop table cc
    insert cc(id,name,parentid) values(1,'aa',0)
    insert cc(id,name,parentid) values(2,'bb',0)
    insert cc(id,name,parentid) values(3,'aa1',1)
    insert cc(id,name,parentid) values(4,'aa2',3)
    insert cc(id,name,parentid) values(5,'bb1',2)
    insert cc(id,name,parentid) values(6,'bb2',5)select id,name,parentid from cc
    --select name from cc
    where parentid=0 or parentid in (select id from cc)
    order by parentid===========
    id          name       parentid    
    ----------- ---------- ----------- 
    1           aa         0
    2           bb         0
    3           aa1        1
    5           bb1        2
    4           aa2        3
    6           bb2        5(6 row(s) affected)
      

  12.   

    其实你还是没说清你要的结果是什么规则,要是像你说的要那种效果的话,在sql中只要一个order by 就行了,
      

  13.   

    select name from @test a where  parentid=0 or parentid in (select id from @test)
      

  14.   

    楼主的要求的确没有说清楚,你的要求和你要求的结果不相符
    如果你写的要求,用楼上 shuiniu(飞扬的梦)的测试过的就行了如果要你的结果那样,用下面的就行了:
       select name from test order by name
      

  15.   

    我想用sql语句实现不想使用存储过程,因为有可能分发给别人时,他的空间不支持sql server只能使用access,那样不就不能用了吗?希望大家能给我sql语句的解决方案,谢谢!分不够我再给
      

  16.   

    改表结构:
    id name parentid
    01 aa 0
    02 bb 0
    0103 aa1 01
    010304 aa2 0103
    0205 bb1 02
    020506 bb2 0205这样一句SELECT就行了
    select * from table order by id
      

  17.   

    ACCESS的话,就在表中增加一个sortid字段.
    然后用程序维护该字段值,使它的值类似于楼上的.
      

  18.   

    sqlserver中:
    select name from 
    (select id, name ,parentid,case when parentid=0 then id else parentid end as parentid2  from test ) as aaorder by parentid2,parentid,idaccess中有个iif函数(可以替换case when )不再多写了