Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取分层数据_Sql_Oracle - Fatal编程技术网

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和更高层次结构,这将不起作用。如何连接将在此处提供帮助请帮助进行查询