--创建原表
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

相关文章:

  • 2022-02-24
  • 2021-09-09
  • 2022-12-23
  • 2021-11-16
  • 2021-07-21
  • 2022-12-23
  • 2021-08-23
猜你喜欢
  • 2021-07-06
  • 2022-12-23
  • 2022-01-22
  • 2022-12-23
  • 2022-12-23
  • 2022-01-03
  • 2022-12-23
相关资源
相似解决方案