Sql 获取分层数据
我的桌子像:Sql 获取分层数据,sql,oracle,Sql,Oracle,我的桌子像: emp id | post | manager id ---------------------------- 1 | l1 | 2 2 | l2 | 3 4 |l1 | 2 3 | l3 | null ----------------------------- emp id | target achived | given target | ----------------------------------
emp id | post | manager id
----------------------------
1 | l1 | 2
2 | l2 | 3
4 |l1 | 2
3 | l3 | null
-----------------------------
emp id | target achived | given target |
----------------------------------------
1 | 200 | 300
---------------------------------------
4 | 400 | 500
我还有一张桌子,像:
emp id | post | manager id
----------------------------
1 | l1 | 2
2 | l2 | 3
4 |l1 | 2
3 | l3 | null
-----------------------------
emp id | target achived | given target |
----------------------------------------
1 | 200 | 300
---------------------------------------
4 | 400 | 500
我有一个功能可以发出通知,比如
l1 id----target achived/target given
1200/300
4400/500
上面提到的通知emp id 2将得到,谁是l2
所有l2都将收到这样的通知
l3将只收到l2的短信
对于给定情况,l2目标已实现=其所有l1目标已实现的所有目标
所以emp id 3会变成----
empid 2--- 2, 600/800
如何设计查询是一种广义的方法,层次结构的深度可以是任何东西。。实际工作仅由l1完成。
通知将类似于-
l2将只获得他自己的l1的结果。
l3将得到他自己的l2结果,相应的l1和相应的l2 sms的结果之和…依此类推…在您连接的Oacle中运行分层查询 这里有一个关于这个主题的AskTom链接。你也可以通过谷歌连接Oracle 我没有安装Oracle,因此无法对其进行测试,但您可以通过以下方式获得manager的已实现/目标总数: 按经理获取经理报告的分层结果。 获取每个经理的统计数据,就好像他们是自己的老板一样,以便在他们自己的报告中包含这些信息。 合并这两组信息。 并由经理对信息进行汇总 同样,查询可能有输入错误,但所提供的策略应该有效
select sum(c_achieved), sum(c_target), c_manager
from
(
-- Get the metrics of each manager's reports
select all_info.t_achieved c_achieved, all_info.t_target c_target, all_info.manager c_manager
from
(select emp_id, post, manager, t_achieved, t_target
from emps, targets
where emps.emp_id = targets.emp_id) all_info
start with all_info.manager is null
connect by prior all_info.emp_id = all_info.manager
union
--Get the metrics of the managers to add them to themelves
select all_info2.t_achieved, all_info2.t_target, all_info2.emp_id
from
(select null, post, emp_id, t_achieved, t_target
from emps, targets
where emps.emp_id in (select distinct manager from emps) all_info_2
where all_info_2.emp_id = all_info_2.manager
) stats_by_manager
group by c_manager
如果我使用类似于--select target achived的查询,则在select emp id中的targettable中指定的目标,其中管理器id=2,来自emptablefor l3查询将类似于select sumtarget achived,sumtarget由targettable提供,其中emp id在SelectEmpID from emptable中,其中manager id=3——对于l3和更高层次结构,这将不起作用。如何连接将在此处提供帮助请帮助进行查询