树形数据转换

原创 2004年12月22日 13:56:00

原帖地址:
http://community.csdn.net/Expert/topic/3663/3663934.xml?temp=.9100458


--测试数据
create table PROJECT(id int,name nvarchar(20),parent_id int)
insert PROJECT select 1,'所有项目',null
union  all     select 2,'项目1',1
union  all     select 3,'项目2',1

create table task(id int,name nvarchar(20),outline varchar(10))
insert task select 1 ,'任务1'      ,'1'
union  all  select 2 ,'任务1.1'    ,'1.1'
union  all  select 3 ,'任务1.1.1'  ,'1.1.1'
union  all  select 4 ,'任务1.1.2'  ,'1.1.2'
union  all  select 5 ,'任务2'      ,'2'
union  all  select 6 ,'任务2.1'    ,'2.1'
union  all  select 7 ,'任务2.1.1'  ,'2.1.1'
union  all  select 8 ,'任务2.1.1.1','2.1.1.1'
union  all  select 9 ,'任务3'      ,'3'
union  all  select 10,'任务4'      ,'4'
union  all  select 11,'任务4.1'    ,'4.1'
go

/*--处理要求
 
 1.把一数据库的TASK表的数据导入到另一数据库的PROJECT表与TEMP1表.导进去的数据上下级关系不再是用大纲显示,而是通过parent_id和project_id表示上下级。
 2.表TEMP1的project_id与project表中的id关联,表project表中的parent_id是对该表本身id字段的关连。
 3.要把task表的最底层的任务(没有子任务的)导入到temp1表,他的上级任务通过project_id关连
 4.从TASK表导入数据的parent_id自己输入
--*/

/*--最后实现的结果:

--** PROJECT 表的内容
id          name                 parent_id  
----------- -------------------- -----------
1           所有项目               NULL
2           项目1                  1
3           项目2                  1
4           任务1                  2
5           任务1.1                4
6           任务2                  2
7           任务2.1                6
8           任务2.1.1              7
9           任务4                  2

(所影响的行数为 9 行)

--temp1 表的内容
id          name                 project_id 
----------- -------------------- -----------
1           任务1.1.1              5
2           任务1.1.2              5
3           任务2.1.1.1            8
4           任务3                  2
5           任务4.1                9

(所影响的行数为 5 行)
--*/

--处理的存储过程
create proc p_process
@parent_id int=2
as
set nocount on
declare @id int,@step int,@s nvarchar(1000)

--得到 PROJECT 表中的新编号(因为不知道PROJECT的id是否标识字段,所以用了一些判断)
select @step=ident_incr('PROJECT')
,@id=ident_current('PROJECT')+@step
if @id is null
select @id=isnull(max(id),0)+1 from PROJECT
select @s='alter table #t add id int identity('+rtrim(@id)+','+rtrim(isnull(@step,1))+')'

--生成处理临时表
select name,parent_id=@parent_id,outline into #t from task a
where exists(
select * from task where outline like a.outline+'.%')
order by outline

--生成id,并且生成 praent_id
exec(@s)
update a set parent_id=b.id
from #t a,#t b
where charindex('.',a.outline)>0
and a.outline like b.outline+'.%'
and charindex('.',a.outline,len(b.outline)+2)=0

--处理结果插入 PROJECT
if @step is not null
set identity_insert PROJECT on
insert PROJECT(id,name,parent_id) select id,name,parent_id from #t

--生成表temp1
if exists(select * from sysobjects where name='temp1' and objectproperty(id,'isusertable')=1)
drop table temp1
select id=identity(int),a.name,isnull(b.id,@parent_id) as project_id
into temp1 from task a left join
#t b on a.outline like b.outline+'.%'
and charindex('.',a.outline,len(b.outline)+2)=0
where not exists(
select * from #t where outline=a.outline)
go

--调用
exec p_process 2

--显示处理后的结果
select * from PROJECT
select * from temp1
go

--删除测试
drop table PROJECT,task,temp1
drop proc p_process

通用列表数据转化为树形结构

最近做项目用的是JQuery  easyUI 控件, 虽然很强大,但是高级控件对于数据的格式要求比较严格遇到 如下问题     1.使用comboTree 控件   绑定树形的组织结构   但...
  • zhxh0376
  • zhxh0376
  • 2015年07月16日 18:03
  • 1293

两种树形菜单结构互相转换

两种树形菜单结构 SingleTreeNode:package com.zzj.tree; public class SingleTreeNode { private int id; priva...
  • zhangzeyuaaa
  • zhangzeyuaaa
  • 2017年01月08日 14:14
  • 722

java 把DataTable数据类型转换为树形结构(多叉树)

问题分析:一个关系数据库的表,如图所示: 可以看到后面四个字段:Country,Province,City,Street 具有逻辑上的从属结构,现在要把这种数据搞成一个树形结构,如图所示: 不...
  • xinfei0803
  • xinfei0803
  • 2015年06月01日 22:53
  • 2356

树形结构的数据如何保存到关系型的数据库

需求: 文档型数据,结构是树形的,如图: 想要读取生成树形结构、添加子节点、查找修改数据的代价最小。 看知乎上牛人的答案: 一般比较普遍的就是四种方法:(具体见 SQL Ant...
  • jim8757
  • jim8757
  • 2016年08月31日 15:41
  • 3568

树形结构后台数据代码拼装(基于上一篇)

1.java 树的数据构成
  • u014242422
  • u014242422
  • 2016年10月23日 23:22
  • 930

【java基础 3】树形结构数据呈现的递归算法实现

一、基本概况 在我的项目中,常常会用到树形结构的数据,最为明显的就是左边菜单栏,类似于window folder一样的东西。 而我之前一直是借助前端封装好的ZTree等工具实现展示,而后台则通常使...
  • u013034889
  • u013034889
  • 2016年08月27日 18:12
  • 5544

项目开发-树形层级结构中的数量统计

项目开发中,有一 菜单的树形结构展示时,需要统计各个菜单下记录的总数,通常如果树形结构的深度为2(只有两级菜单的话),使用for循环统计没有问题,但是如果树形菜单的深度没有限制,就不能通过两次for循...
  • wojiushiwo945you
  • wojiushiwo945you
  • 2015年03月12日 16:05
  • 1615

java+SpringMvc——查询数据,以树形结构显示

三省农场服务平台有一个业务是从数据库中查询信息,在界面上显示,显示的样式为树形结构,做到动态的变化,以前也实现过这样的功能,可能方法上略有不同,我们看下这个是怎么样实现的吧!      效果图...
  • hanxintong9
  • hanxintong9
  • 2015年12月29日 15:08
  • 5914

Android ExpandableListview使用gson解析树形结构数据。

Android的数据提供了json和XML方面的
  • a11483314
  • a11483314
  • 2014年10月31日 15:59
  • 825

使用js进行二叉树结构数据与数组结构数据的互相转化

简单的说下树形数据的结构:"type": "logic", "content": "and", "left": { "type": "leaf", "content": "=", ...
  • u014291497
  • u014291497
  • 2016年08月25日 23:17
  • 1932
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:树形数据转换
举报原因:
原因补充:

(最多只允许输入30个字)