原帖地址:
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
分享到:
相关推荐
把扁平化的数据转换成树形结构的JSON
数据结构为数组中包含对象–树形结构,用Vue组件的写法实现以下的效果: 树形列表,缩进显示层级,第5级数据加底色,数据样式显色,点击展开折叠数据。本文为用Vue实现方式,另有一篇为用knockout.js的实现方法。 ...
将平行数据转换成树形菜单,适用于服务端传递行级别数据,在前端展示树形菜单或者级联时的前置转换适配工具
开发项目的时候遇到需要在表单中选择参会人员,根据不同部门下选择不同的人,在element-ui中有树形控件能满足这种情况,后台封装数据记录一下。 封装格式: 返回数据格式: 接收数据的pojo类: 2018年4月12...
在该文件中完整的展示了如何利用tp的模型从mysql取得数据,并进行无限分类,最终转换成layui树形组件所需正确格式,当然也添加了一些layui所需的自定义属性(例如:title、spread等),几乎每一行都有注释,也表明了...
把扁平化的数据转换成树形结构的JSON,把树形JSON扁平化
一种基于树形结构的Sql结果集向Json数据的转换算法.pdf
Java实现的,将树形层级结构的数据转换成表格,通过打点的方式向表格中插入数据,支持行头表格、列头表格、交叉表格三种形式
基于jsTree的无限级树JSON数据的转换 a 基于jsTree的无限级树JSON数据的转换 ddd v 基于jsTree的无限级树JSON数据的转换
把字母表示的图状数据结构转换为树状数据结构 采用DefaultMutableTreeNode类的方式建立一个图状数据结构,顶点为字母A、B、C等,你也可以自己设计。可以帮助你把一个复杂的网状关系变成一个条理化的树状关系,并通过...
let data = [ { id: 1, name: "目录1", parentId: 0, }, { id: 2, name: "目录1-1", parentId: 1, }, { id: 3, name: "目录1-2", parentId: 1, }, { id: 4, name: "目录1-1-1", ...
一、数据库父子结构数据设计 大部分采用 parentId的形式来存储父id,并且只存储父id,祖父Id不存储。也可以添加存储层级级别或者层级关系等字段。 CREATE TABLE `t_resource` ( `id` varchar(255) NOT NULL ...
将文件直接复制到layui/lay/modules目录下,会覆盖layui原有的tree.js,调用方法与layui树形组件的适应方式一致,新增的方法可在文件中查看
支持单选和多选,多级组织,支持搜索,面包屑类型导航,无限级结构树形结构。可以打包小程序,h5页面,app
功能一:按照树形图打印二叉树,型如: 8 7 11 4 9 10 15 功能2:实现创建一个有序的二叉树 功能3:实现平衡二叉树,对所创建的二叉树进行左旋和右旋,直到成为平衡二叉树。 功能3:按照树中数据删除某个节点,...
JavaScript通过对数据进行数据转换实现二叉树。数据结构如下:let data = [ { id: 1, name: "目录1", parentId: 0, }, { id: 2, name: "目录1-1", parentId: 1, }]
从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作: (1)访问结点本身(N), (2)遍历该结点的左子树(L), (3)遍历该...
5.完美支持json格式数据,支持xml(需转换) 6.支持ajax加载节点 7.事件驱动 8.可以动态根据列内容排序 9.简化函数参数,利用{} object输入参数,风格类似Extjs 10.树状结构可以选择出现在某一列,不一定要在第一列 11....
一个非常实用的无限级菜单源码,采用JS脚本(无刷新操作)+Sql2000数据库,数据操作使用了DBHelperSql进行菜单的增删 该程序有Asp.net1.1转换到Asp.net2.0
js数组转换成tree结构数组算法