--测试数据创建
create table T004
(
id int identity(1,1),
grade1 nvarchar(50),
grade2 nvarchar(50)
)
go
insert T004(grade1,grade2)
select 'Code','Code_01' union all
select 'Code','Code_02' union all
select 'Code','Code_03' union all
select 'Html','Html_01' union all
select 'Html','Html_02' union all
select 'Code','Code_04' union all
select 'Html','Html_03' union all
select 'Code','Code_05' 
/*--求效果(类似树形菜单,但是表结构就目前这个结构)id list type(0:目录一级分类 1:目录二级分类)
0  Code  0
1  Code_01  1
2  Code_02  1
3  Code_03  1
6  Code_04  1
8  Code_05  1
0  Html      0
4  Html_01   1
5  Html_02  1
7  Html_03  1          ***/

解决方案 »

  1.   


    with t
    as
    (
    select ID,grade1,grade2
    from t004union allselect 0 as id,null as grade1,grade1 as grade2  --构造一个根节点
    from T004 
    group by grade1
    ),tt   --递归查询
    as
    (
    select id,
           grade1,
           grade2,
           0 as level
    from t
    where grade1 is nullunion allselect t.id,
           t.grade1,
           t.grade2,
           level + 1 as level
    from tt 
    inner join t
            on tt.grade2 = t.grade1
    )select ID,
           grade2 as list,
           level
    from tt
    order by 2,1,3