原帖地址:
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
分享到:
相关推荐
为了解决这一问题,文档提出了一种树形回声状态网络方法,该方法能够对树形数据进行建模,生成固定维数的空间模型,从而将复杂的树形数据转换为模型空间中的点。基于模型空间的思想,通过模型空间中点的距离来度量树...
4. **数据转换**:layui的穿梭框组件默认支持扁平化的数据结构,而我们的数据源是树形结构,所以需要编写一个函数`convertTreeDataToTransfer`,将树形数据转换为穿梭框所需的格式。 5. **自定义样式和事件**:根据...
下面是一个简单的JavaScript函数示例,演示了如何将扁平化的数据转换为树形结构: ```javascript function flatDataToTree(flatData, idField, parentField) { const nodeMap = {}; const tree = []; // 构建...
在这个项目中,jquery-treeview将由后端传递的树形数据转换成用户友好的视觉表示。 具体到项目中的“Tree”文件,这可能包含的是HTML模板、CSS样式表以及JavaScript脚本,它们共同协作以呈现树形菜单。HTML模板可能...
在给出的示例中,我们使用递归方法将树形数据转换为扁平数据。以下是这种方法的基本步骤: 1. 定义一个空数组`res`,用于存储扁平化后的数据。 2. 创建一个名为`fn`的递归函数,它接受树形数据的源数组作为参数。 3...
2. **渲染**:将树形数据转换为HTML结构,展示在页面上。这通常涉及到递归遍历节点,生成相应的DOM元素。 3. **事件处理**:`dtree`支持点击、展开/折叠等事件监听,允许用户与树形结构进行交互。例如,点击一个...
在实际应用中,我们可能需要将数据库中的树形数据转换成JSON格式,以便于在前端进行显示。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java中,...
2. **数据解析**:对于树形结构数据,需要逐级解析,可能涉及到递归方法,将每一层的数据转换成Java对象。这些对象可能包含父节点、子节点以及相关属性。 3. **数据映射**:将Excel中的列名与Oracle数据库表的字段...
数据结构为数组中包含对象–树形结构,用Vue组件的写法实现以下的效果: 树形列表,缩进显示层级,第5级数据加底色,数据样式显色,点击展开折叠数据。本文为用Vue实现方式,另有一篇为用knockout.js的实现方法。 ...
创建了树形数据结构后,可以使用各种JavaScript库(如React、Vue、Angular等)或自定义的DOM操作来渲染成实际的UI。例如,React中可以使用`<Tree>`组件,根据每个节点的`children`属性递归地渲染子节点。 5. **...
接着,JSP页面接收Servlet传递的数据,并将其转换为HTML,呈现为树形菜单。 实现步骤如下: 1. **数据模型**:创建一个表示菜单节点的Java类,如`MenuItem`,包含`id`、`name`、`parent_id`等属性,以及`children`...
3. **Hibernate DAO**:编写DAO类,使用HQL或SQL查询数据库,获取树形数据。 4. **数据转换为JSON**:将Service层获取的数据转换为JSON格式,可以使用Jackson或Gson等库进行转换。 5. **EasyUI TreeGrid配置**:在...
在Java项目中,我们可以使用 PlantUML 的 API 或者命令行工具,将树形数据转换为可读性强、美观的图像。 在压缩包中的"新建文件夹"可能包含了使用上述方法生成的图片式树形结构图示例,或者是一些代码示例和教程...
- 自定义适配器:开发者需要创建一个自定义的Adapter,将树形数据转换为视图,处理节点的展开与折叠。 - 视图状态:每个节点视图需要维护展开/折叠的状态,这通常通过复用convertView并在getView()方法中更新状态来...
例如,从扁平化的数据转换成树形结构的JSON,以及将树形JSON再扁平化,这两个过程在数据处理、数据库操作和前端展示等方面都有广泛的应用。 标题和描述提及的"把扁平化的数据转换成树形结构的JSON,把树形JSON扁平...
后端服务器(通常基于Spring MVC或Struts2框架)负责处理请求,查询数据库并返回JSON格式的数据,前端JavaScript将这些数据转换为树形结构展示在页面上。在给定的项目中,可能包含了这样的前后端交互逻辑和数据库...
dtree插件则是在前端展示这些数据的工具,它可能是一个JavaScript库或组件,用于将从Oracle数据库获取的树形数据转换成用户友好的交互式树状视图。使用dtree,我们可以轻松地创建可折叠的菜单,用户可以通过点击节点...
2. 数据转换:将树形结构的数据转换为Json数据。 3. 数据优化:对Json数据进行优化,以提高数据的显示效果。 三、实验结果 通过实验,我们可以看到,该算法可以将Sql结果集正确地转换为Json数据,满足Web应用中树...
4. 数据转换:根据数据库字段类型,将Excel数据转换为适合插入的格式。例如,日期可能需要统一格式,文本数据可能需要进行编码处理。 5. 数据清洗:检查并处理Excel中的空值、异常值或重复数据,保证数据质量。 6....