`
wsql
  • 浏览: 12061732 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

树形数据转换

阅读更多

原帖地址:
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

分享到:
评论

相关推荐

    基于模型空间的树形数据处理方法.pdf

    为了解决这一问题,文档提出了一种树形回声状态网络方法,该方法能够对树形数据进行建模,生成固定维数的空间模型,从而将复杂的树形数据转换为模型空间中的点。基于模型空间的思想,通过模型空间中点的距离来度量树...

    基于layui实现树形穿梭框

    4. **数据转换**:layui的穿梭框组件默认支持扁平化的数据结构,而我们的数据源是树形结构,所以需要编写一个函数`convertTreeDataToTransfer`,将树形数据转换为穿梭框所需的格式。 5. **自定义样式和事件**:根据...

    把扁平化的数据转换成树形结构的JSON

    下面是一个简单的JavaScript函数示例,演示了如何将扁平化的数据转换为树形结构: ```javascript function flatDataToTree(flatData, idField, parentField) { const nodeMap = {}; const tree = []; // 构建...

    s2sh+freemarker+jquery+jquery-treeview 无限级树形菜单.rar

    在这个项目中,jquery-treeview将由后端传递的树形数据转换成用户友好的视觉表示。 具体到项目中的“Tree”文件,这可能包含的是HTML模板、CSS样式表以及JavaScript脚本,它们共同协作以呈现树形菜单。HTML模板可能...

    js实现树形数据转成扁平数据的方法示例

    在给出的示例中,我们使用递归方法将树形数据转换为扁平数据。以下是这种方法的基本步骤: 1. 定义一个空数组`res`,用于存储扁平化后的数据。 2. 创建一个名为`fn`的递归函数,它接受树形数据的源数组作为参数。 3...

    js树形结构dtree,很好用,有实例

    2. **渲染**:将树形数据转换为HTML结构,展示在页面上。这通常涉及到递归遍历节点,生成相应的DOM元素。 3. **事件处理**:`dtree`支持点击、展开/折叠等事件监听,允许用户与树形结构进行交互。例如,点击一个...

    树形结构数据库设计和显示

    在实际应用中,我们可能需要将数据库中的树形数据转换成JSON格式,以便于在前端进行显示。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java中,...

    Excel树形结构数据导入Oracle数据库(Java)

    2. **数据解析**:对于树形结构数据,需要逐级解析,可能涉及到递归方法,将每一层的数据转换成Java对象。这些对象可能包含父节点、子节点以及相关属性。 3. **数据映射**:将Excel中的列名与Oracle数据库表的字段...

    Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)

    数据结构为数组中包含对象–树形结构,用Vue组件的写法实现以下的效果: 树形列表,缩进显示层级,第5级数据加底色,数据样式显色,点击展开折叠数据。本文为用Vue实现方式,另有一篇为用knockout.js的实现方法。 ...

    JavaScript将服务端平行数据转换成树形菜单形式

    创建了树形数据结构后,可以使用各种JavaScript库(如React、Vue、Angular等)或自定义的DOM操作来渲染成实际的UI。例如,React中可以使用`<Tree>`组件,根据每个节点的`children`属性递归地渲染子节点。 5. **...

    java动态树形菜单

    接着,JSP页面接收Servlet传递的数据,并将其转换为HTML,呈现为树形菜单。 实现步骤如下: 1. **数据模型**:创建一个表示菜单节点的Java类,如`MenuItem`,包含`id`、`name`、`parent_id`等属性,以及`children`...

    SSH+Easyui之TreeGrid树形展现数据

    3. **Hibernate DAO**:编写DAO类,使用HQL或SQL查询数据库,获取树形数据。 4. **数据转换为JSON**:将Service层获取的数据转换为JSON格式,可以使用Jackson或Gson等库进行转换。 5. **EasyUI TreeGrid配置**:在...

    图片式树形结构图总结.zip

    在Java项目中,我们可以使用 PlantUML 的 API 或者命令行工具,将树形数据转换为可读性强、美观的图像。 在压缩包中的"新建文件夹"可能包含了使用上述方法生成的图片式树形结构图示例,或者是一些代码示例和教程...

    Android源码——树形控件源码.zip

    - 自定义适配器:开发者需要创建一个自定义的Adapter,将树形数据转换为视图,处理节点的展开与折叠。 - 视图状态:每个节点视图需要维护展开/折叠的状态,这通常通过复用convertView并在getView()方法中更新状态来...

    把扁平化的数据转换成树形结构的JSON,把树形JSON扁平化.zip

    例如,从扁平化的数据转换成树形结构的JSON,以及将树形JSON再扁平化,这两个过程在数据处理、数据库操作和前端展示等方面都有广泛的应用。 标题和描述提及的"把扁平化的数据转换成树形结构的JSON,把树形JSON扁平...

    java动态树形菜单与分页

    后端服务器(通常基于Spring MVC或Struts2框架)负责处理请求,查询数据库并返回JSON格式的数据,前端JavaScript将这些数据转换为树形结构展示在页面上。在给定的项目中,可能包含了这样的前后端交互逻辑和数据库...

    oracle树形结构,结合dtree插件使用显示树状结构菜单

    dtree插件则是在前端展示这些数据的工具,它可能是一个JavaScript库或组件,用于将从Oracle数据库获取的树形数据转换成用户友好的交互式树状视图。使用dtree,我们可以轻松地创建可折叠的菜单,用户可以通过点击节点...

    一种基于树形结构的Sql结果集向Json数据的转换算法.pdf

    2. 数据转换:将树形结构的数据转换为Json数据。 3. 数据优化:对Json数据进行优化,以提高数据的显示效果。 三、实验结果 通过实验,我们可以看到,该算法可以将Sql结果集正确地转换为Json数据,满足Web应用中树...

    excel树形字典,导入数据库

    4. 数据转换:根据数据库字段类型,将Excel数据转换为适合插入的格式。例如,日期可能需要统一格式,文本数据可能需要进行编码处理。 5. 数据清洗:检查并处理Excel中的空值、异常值或重复数据,保证数据质量。 6....

Global site tag (gtag.js) - Google Analytics