2015-09-04 106 views
0

我有一組數據用於存儲員工及其在一段時間(一個月內)的收入。這些數據還存儲多個站點,員工可以爲每個站點分配收入。我正在嘗試爲數據添加排名,以便每個員工根據每個網站的收入排名。對於多個條件的SQL排名()

示例數據

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。

我在這裏錯過了什麼,我相信這應該是一個簡單的查詢,但它現在正在殺死我。

謝謝

+0

正如在問題中,員工需要按每個網站的收入進行排名。有兩個等級1,因爲有多個網站,每個網站應該有一個等級1 – Stuart1044

回答

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 

希望這一個?

+0

我覺得很簡單。我總是絆倒Rank() – Stuart1044

+0

是啊,首先我對你的帖子感到困惑,但是最終的結果讓我意識到,「我想通過SiteId安排事情並訂購金額,然後EmployeeId?呃..不包括在內分區,但將在稍後訂購。「是的,我認爲這是我得到這個的方式。 –