zoukankan      html  css  js  c++  java
  • 在同一个表内显示数据分级

    --创建原表
    create table #test
    (
     id int,
     level int,
     pid int,
     sortorder int
    )
    --插入数据,假定有三级数据
    insert into #test select 1,0,0,1
    insert into #test select 2,1,1,2
    insert into #test select 3,0,0,3
    insert into #test select 4,1,3,4
    insert into #test select 5,0,0,5
    insert into #test select 6,1,1,6
    insert into #test select 7,2,4,7
    --原数据
    select * from #test
    --创建临时表
    create table #test1
    (
     id int,
     level int,
     pid int,
     sortorder int,
     newsortorder int
    )
    --第一步,插入第一级数据 newsortorder = sortorder * 级别数
    insert into #test1 select id,level,pid,sortorder,sortorder*3 from #test where level = 0
    --第二步,插入第二级数据
    insert into #test1
    select
     t.id,t.level,t.pid,t.sortorder,t1.newsortorder + 1
    from #test t
    left join #test1 t1 on t.pid = t1.id
    where t.level = 1
    order by t.sortorder
    --第二步,插入第三级数据
    insert into #test1
    select
     t.id,t.level,t.pid,t.sortorder,t1.newsortorder + 1
    from #test t
    left join #test1 t1 on t.pid = t1.id
    where t.level = 2
    order by t.sortorder
    --得到结果
    select * from #test1 order by newsortorder,sortorder

    效果图:

    如果大家有什么更好的方法,一起交流一下。

    补充于:2008-08-02

    上面的方法对于这样的数据就会有问题

     

    以下是我在上面的方法上修改的结果:

    --创建原表
    create table #test
    (
     id int,
     level int,
     pid int,
     sortorder int
    )
    --插入数据,假定有三级数据
    insert into #test select 1,0,0,1
    insert into #test select 2,1,1,2
    insert into #test select 3,0,0,3
    insert into #test select 4,1,3,4
    insert into #test select 5,0,0,5
    insert into #test select 6,1,1,6
    insert into #test select 7,2,4,7
    --原数据
    select * from test
    DROP TABLE #test1
    --创建临时表
    create table #test1
    (
     id int,
     level int,
     pid int,
     sortorder int,
     newsortorder nvarchar(20)
    )
    --第一步,插入第一级数据 newsortorder = sortorder * 级别数
    insert into #test1 select id,level,pid,sortorder,cast(CASE WHEN sortorder IS NULL THEN 1 ELSE sortorder END AS nvarchar(20)) from test where level = 0
    --第二步,插入第二级数据
    insert into #test1
    select
     t.id,t.level,t.pid,t.sortorder,t1.newsortorder + cast(CASE WHEN t.sortorder IS NULL THEN 1 ELSE t.sortorder END AS nvarchar(20))
    from test t
    left join #test1 t1 on t.pid = t1.id
    where t.level = 1
    order by t.sortorder
    --第二步,插入第三级数据
    insert into #test1
    select
     t.id,t.level,t.pid,t.sortorder,t1.newsortorder + cast(CASE WHEN t.sortorder IS NULL THEN 1 ELSE t.sortorder END AS nvarchar(20))
    from test t
    left join #test1 t1 on t.pid = t1.id
    where t.level = 2
    order by t.sortorder
    --得到结果
    select * from #test1 order by newsortorder,sortorder

  • 相关阅读:
    20165339 预备作业3 Linux安装及学习
    20165339 学习基础和c语言基础调查
    20165339 我期望的师生关系
    2018-2019-1 20165332 《信息安全系统设计基础》第3周学习总结
    2018-2019-1 20165332 《信息安全系统设计基础》第2周学习总结
    2018-2019-1 20165332 《信息安全系统设计基础》第1周学习总结
    20165332 2017-2018-2《Java程序设计》课程总结
    20165332实验五 网络编程与安全
    20165332实验四 Android开发基础
    20165332第十周课下作业
  • 原文地址:https://www.cnblogs.com/icebutterfly/p/1353759.html
Copyright © 2011-2022 走看看