首页 > 解决方案 > 计算其他列中 ID 的出现次数

问题描述

我正在尝试运行一个查询,该查询加载员工 ID、他们的经理(从 CEO 到直接主管),然后计算他们的报告组中的人数(他们直接或间接监督的人)。我已经弄清楚如何做第一部分,加载员工 ID 和经理层次结构。

为了简化我的问题,假设我创建的表如下所示:

EMPL_ID    MGR_1    MGR_2
001        001      
002        001      
003        001      002
004        001      002
005        001      002
006        001
007        001      006

所以 MGR_1 是最高管理者(我的实际数据集有数千行和管理者一直到 MGR_10,但这个简单的例子应该是说明性的)。我想要的最终结果是:

EMPL_ID    MGR_1    MGR_2    REP_GRP
001        001               7
002        001               3
003        001      002      0
004        001      002      0
005        001      002      0
006        001               1
007        001      006      0

所以 REP_GRP 是向 EMPL_ID 指定的人员报告的员工数量。

我试过用子查询和案例语句来做这件事,但我不能让它工作。有任何想法吗?

标签: sql

解决方案


你可以试试下面的代码。可能有更好的解决方案,但这是我在旅途中能想到的。

WITH MgrCount AS (
select MGR_1 AS Mgr, COUNT(EMPL_ID) AS REP_GRP
FROM CountMGR 
WHERE MGR_1 IS NOT NULL
GROUP BY MGR_1
UNION ALL 
select MGR_2 AS Mgr, COUNT(EMPL_ID) AS REP_GRP
FROM CountMGR 
WHERE MGR_2 IS NOT NULL
GROUP BY MGR_2
)

SELECT EMPL_ID, MGR_1, MGR_2, COALESCE (REP_GRP, 0)
FROM CountMGR AS M
LEFT OUTER JOIN MgrCount AS C ON M.EMPL_ID = C.Mgr

推荐阅读