我有一个像这样的员工表: -
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'
但这对我没有用。我知道这是一个非常明显的问题,但我请问我该怎么做?提前谢谢。
答案 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