求一个sql语句树的计算
有一个表。
dept(id ,p_id,mc)记录了上下级关系
一个业务表
tab_name(id,dept_id);
现在在dept里面选择N个部门,求出部门里面 tab_name里面这N个部门的值,这个部门有可能有很多下级
------解决方案--------------------
引用:Quote: 引用:Quote: 引用:Quote: 引用:有一个表。
dept(id ,p_id,mc)记录了上下级关系
一个业务表
tab_name(id,dept_id);
现在在dept里面选择N个部门,求出部门里面 tab_name里面这N个部门的值,这个部门有可能有很多下级
不是很清楚你的需求,最好能够通过模拟数据来描述你需要的结果
dept 表
id mc pid
1 a
2 b
3 c
4 a1 1
5 b1 2
6 c1 3
7 a11 1
8 b11 2
9 c11 3
业务数据全部是有 7、8 、 9来
tabname
id dept_id
1 7
2 7
3 8
4 9
5 7
6 7
我的统计根据选择dept 表来进行计算。
加入我们同时选择 a,b,c 则统计数据为:
a 4
b 1
c 1
如果我们选择 a b
a 4
b 1
我现在能通过start with connect by 统计出a=4 ,b=1 ,c=1 但是我的这个统计只能单个出来,不能同时出来。
这里的选择 还有可能是 a c1等 不规则的选择
with t1 as
(select 1 id, 'a' mc, null pid
from dual
union all
select 2 id, 'b' mc, null pid
from dual
union all
select 3 id, 'c' mc, null pid
from dual
union all
select 4 id, 'a1' mc, 1 pid
from dual
union all
select 5 id, 'b1' mc, 2 pid
from dual
union all
select 6 id, 'c1' mc, 3 pid
from dual
union all
select 7 id, 'a11' mc, 1 pid
from dual
union all
select 8 id, 'b11' mc, 2 pid
from dual
union all
select 9 id, 'c11' mc, 3 pid
from dual),
t2 as
(select 1 id, 7 dept_id
from dual
union all
select 2 id, 7 dept_id
from dual
union all
select 3 id, 8 dept_id
from dual
union all
select 4 id, 9 dept_id
from dual
union all
select 5 id, 7 dept_id
from dual
union all
select 6 id, 7 dept_id
from dual)
select count(t2.id), root_id
from t2,
(select t1.*, CONNECT_BY_ROOT(mc) root_id
from t1
start with mc in ('a', 'b', 'c', 'a1', 'a11')
connect by pid = prior id) t3
where t2.dept_id(+) = t3.id
group by root_id