Sql Oracle中的员工经理层次结构查询
我有一张结构如下的表格: +-------+-------+ | EMPID | MGRID | +-------+-------+ | A | B | | B | C | | C | D | | I | J | | J | D | | K | L | | L | O | | O | D | +-------+-------+ +-------+-------+ |EMPID | MGRID| +-------+-------+ |A | B| |B|C| |C|D| |I|J| |J|D| |基尔| |L|O| |O|D| +-------+-------+ 我想构建一个查询,可以创建一个视图,如下所示,将所有管理器层次结构显示为以最高管理器开头的列,但是我不确定如何在oracle中实现这一点。有人能帮我建议一下怎么做吗 所需输出: +-------+-------+------+------+------+ | EMPID | MGRID | LVL1 | LVL2 | LVL3 | +-------+-------+------+------+------+ | A | B | D | C | B | | B | C | D | C | | | C | D | D | | | | I | J | D | J | | | J | D | D | | | | K | L | D | O | L | | L | O | D | O | | | O | D | D | | | +-------+-------+------+------+------+ +-------+-------+------+------+------+ |EMPID |经理|一级|二级|三级| +-------+-------+------+------+------+ |A | B | D | C | B| |B | C | D | C || |C | D | D || |我| J | D | J || |J | D | D || |K | L | D | O | L| |L|O|D|O|| |O | D | D || +-------+-------+------+------+------+Sql Oracle中的员工经理层次结构查询,sql,oracle,hierarchical-data,hierarchical-query,Sql,Oracle,Hierarchical Data,Hierarchical Query,我有一张结构如下的表格: +-------+-------+ | EMPID | MGRID | +-------+-------+ | A | B | | B | C | | C | D | | I | J | | J | D | | K | L | | L | O | | O | D | +-------+-------+ +-------+-------+ |EM
注意:我不知道如何将表格添加到问题中,但将其添加为文本以便可以复制。您可以使用包含其相关函数的分层查询,例如
SYS\u CONNECT\u BY\u PATH()
和SYS\u CONNECT\u BY\u PATH()
,包括条件聚合:
WITH emp2 AS
(
SELECT empid, mgrid,
MAX( LENGTH(SYS_CONNECT_BY_PATH(empid, '|'))/2 + 1 )
OVER ( PARTITION BY empid , mgrid ) AS max_lvl,
level AS lvl, CONNECT_BY_ROOT(mgrid) AS member
FROM emp
CONNECT BY PRIOR empid = mgrid
)
SELECT empid, mgrid,
MAX( CASE WHEN max_lvl - lvl = 1 THEN member END ) AS LVL1,
MAX( CASE WHEN max_lvl - lvl = 2 THEN member END ) AS LVL2,
MAX( CASE WHEN max_lvl - lvl = 3 THEN member END ) AS LVL3
FROM emp2
GROUP BY empid, mgrid
ORDER BY empid, mgrid;
+-------+-------+------+------+------+
| EMPID | MGRID | LVL1 | LVL2 | LVL3 |
+-------+-------+------+------+------+
| A | B | D | C | B |
| B | C | D | C | |
| C | D | D | | |
| I | J | D | J | |
| J | D | D | | |
| K | L | D | O | L |
| L | O | D | O | |
| O | D | D | | |
+-------+-------+------+------+------+
看起来您希望在此处进行自联接(即将表联接到自身):
select。。。从emp e left outer在mgr1.empid=e.mgrid…
上加入emp mgr1。请不要将图像用于输入或输出数据样本,而应使用文本数据。