【发布时间】:2015-09-04 10:11:57
【问题描述】:
我有一组数据,用于存储员工及其在一段时间内(比如一个月)的收入。数据还存储多个站点,员工可以为每个站点获取收益。我正在尝试为数据添加一个排名,以便每个员工都有一个基于每个站点的收入的排名。
示例数据
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,因为有多个站点,每个站点都应该有一个排名 1
标签: sql sql-server rank