多个条件的SQL Rank()

时间:2015-09-04 10:11:57

标签: sql sql-server rank

我有一组数据存储员工及其一段时间的收入(一个月说)。数据还存储多个站点,员工可以获得每个站点的收入。我正在尝试为数据添加排名,以便每个员工都根据每个站点的收入排名。

示例数据

EmpId   Takings SiteID
1       150.00  1
1       0.00    2
2       0.00    1
2       100.00  2
3       100.00  1
3       1100.00 2

我已尝试过以下查询,但这只能让我排名最多为两位:

SELECT EmpId,Takings,SiteID, RANK() OVER (PARTITION BY EmpId ORDER BY Takings DESC) AS [Rank]
FROM #test

这给了我以下结果集:

EmpId   Takings SiteID  Rank
1       150.00  1       1
1       0.00    2       2
2       100.00  2       1
2       0.00    1       2
3       1100.00 2       1
3       100.00  1       2

我期待以下结果集:

EmpId   Takings SiteID  Rank
1       150.00  1       1
1       0.00    2       3
2       100.00  2       2
2       0.00    1       3
3       1100.00 2       1
3       100.00  1       2

如果我修改分区以包含SiteId,那么我的所有员工的排名都是1.

我在这里缺少什么,我确信这应该是一个简单的查询,但它现在正在扼杀我。

谢谢

1 个答案:

答案 0 :(得分:3)

SELECT EmpId,Takings,SiteID, ROW_NUMBER() OVER (PARTITION BY SiteId ORDER BY Takings DESC) AS [Rank]
FROM #test
ORDER BY EmpId ASC, Takings DESC

希望这一个?