首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > IBM DB2 >

嵌套层的数据查询,该怎么处理

2013-09-06 
嵌套层的数据查询数据库设计:(hi_org)部门表:有 path(路径),parentorg(父部门)。(hi_user)人员表:关联 部门

嵌套层的数据查询
数据库设计:(hi_org)部门表:有 path(路径),parentorg(父部门)。
           (hi_user)人员表:关联 部门表
           (AP_MarketProblem)问题表:有处理人,引用人员表

嵌套层的数据查询,该怎么处理

需求: 当我选择一个部门的时候,显示出该部门人员处理问题的能力。 已完成,未完成,总数。
       是整个部门的,而且显示在页面只显示它下一层,的下下层不显示

嵌套层的数据查询,该怎么处理

上图是我能做到的效果,页面上的效果应该是,显示 395 这个部门,意思就是说需要将396和408的数据合并。
问题难点在于部门的层数是不确定的。
[解决办法]
如果意思说取一个部门下所有子部们的人员的话,用递归查询
[解决办法]
递归查询?示例:
db2中关于递归(with)的使用

因为有人问及,这边简单的再探讨一下
-------------------
1.创建测试表
create table zxt_test
( id varchar(10),
  ivalue varchar(20),
  iname varchar(20)
)
commit;
-----------
2.插入测试语句
insert into zxt_test values('1','aa','x'),('2','bb','x'),('3','bb','x'),('1','bb','y'),('2','bb','y'),('3','bb','y');
commit;
---------------
3.查看数据
select * from zxt_test;
1    'aa'    'x'
2    'bb'    'x'
3    'bb'    'x'
1    'bb'    'y'
2    'bb'    'y'
3    'bb'    'y'
----------------
4.with 的写法!
with 
s as (
select row_number()over(partition by iname order by id) id1,
       row_number()over(partition by iname order by id) id2,
       ivalue,iname from zxt_test
)
,
t(iname,id1,id2,ivalue) as
(
select iname,id1,id2,cast(ivalue as varchar(100)) from  s where id1 =1 and id2=1
union all 
select t.iname,t.id1+1,t.id2,cast(s.ivalue
------解决方案--------------------


','
[解决办法]
t.ivalue as varchar(100)) 
from  s, t 
where   s.id2=t.id1+1 and t.iname = s.iname 
)
select iname,ivalue from t where t.id1= (select max(id1) from s where s.iname = t.iname);
5.结果如下:
'x'    'bb,bb,aa'
'y'    'bb,bb,bb'

热点排行