SQL 多个条件的 Rank()
SQL Rank() for multiple conditions
我有一组数据存储员工及其一段时间(比如一个月)的收入。数据还存储多个站点,员工可以为每个站点获取收入。我正在尝试为数据添加排名,以便每个员工都有一个基于收入的排名,对于每个站点。
示例数据
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。
我在这里遗漏了什么,我相信这应该是一个简单的查询,但此刻它让我很痛苦。
谢谢
SELECT EmpId,Takings,SiteID, ROW_NUMBER() OVER (PARTITION BY SiteId ORDER BY Takings DESC) AS [Rank]
FROM #test
ORDER BY EmpId ASC, Takings DESC
希望是这个?
我有一组数据存储员工及其一段时间(比如一个月)的收入。数据还存储多个站点,员工可以为每个站点获取收入。我正在尝试为数据添加排名,以便每个员工都有一个基于收入的排名,对于每个站点。
示例数据
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。
我在这里遗漏了什么,我相信这应该是一个简单的查询,但此刻它让我很痛苦。
谢谢
SELECT EmpId,Takings,SiteID, ROW_NUMBER() OVER (PARTITION BY SiteId ORDER BY Takings DESC) AS [Rank]
FROM #test
ORDER BY EmpId ASC, Takings DESC
希望是这个?