如何让员工按经理的身份记录分组?

时间:2018-03-22 09:54:34

标签: sql-server sql-server-2012

我有一个像这样的员工表: -

Emp_ID  Emp_Name    M_ID    M_Name
1      John         101    Sourav
2      Alice        101    Sourav
3      Bob          201    Ramesh
4      Mitchell     201    Ramesh
5      Ricky        301    Punta
6      Smith        301    Punta

现在这是我用于交易的表格

ID  Emp_ID  Generate
1     1       5
2     1       6
3     1       7
4     2       8
5     2       9
6     2       10
7     3       11
8     4       12
9     5       13

我想根据生成M_ID(MangerID)来计算Rank。我希望输出像这样(排名是根据生成计算的):

    M_ID    Rank
    101     1
    201     2
    301     3

这是我尝试过的。

SELECT M_ID,RANK FROM(
SELECT M_ID, RANK=(SELECT DENSE_RANK() OVER (ORDER BY COALESCE(SUM(Generate),0) DESC) FROM Activity GROUP BY Emp_ID)
FROM Employee
GROUP BY M_ID
)A
WHERE M_ID='201'

但这对我没有用。我知道这是一个非常明显的问题,但我请问我该怎么做?提前谢谢。

1 个答案:

答案 0 :(得分:3)

这是你需要的吗?

SELECT
    E.M_ID,
    GenerateTotal = SUM(A.Generate),
    Ranking = DENSE_RANK() OVER (ORDER BY SUM(A.Generate) DESC)
FROM
    Employee AS E
    INNER JOIN Activity AS A ON E.Emp_ID = A.Emp_ID
GROUP BY
    E.M_ID