2011-11-15 81 views
5

考慮到這個表:更新,與結果排名

create table t (EventId int 
       ,Section int 
       ,PlayerName nvarchar(50) 
       ,Score  int 
       ,Rank  int 
       ) 

我試圖寫T-SQL確實有EVENTID作爲輸入,並使用RANK功能由得分排名,但與部分分離(排名個人對於每個部分,等級1爲在每個部分中最高得分等),然後設定/更新所述Rank值

回答

11
UPDATE tbl 
SET [Rank] = t2.[Rank] 
FROM tbl t1 
LEFT OUTER JOIN 
(
    SELECT EventId 
    , Section 
    , PlayerName 
    , Score 
    , RANK() OVER (PARTITION BY EventId, Section ORDER BY Score desc) as [Rank] 
    FROM tbl 
) as t2 
    ON t1.EventId = t2.EventId 
    AND t1.Section = t2.Section 
    AND t1.PlayerName = t2.PlayerName 

Here它是在運行SEDE。

+3

工作完美,希望我能給你多個投票! – StefanE

+0

@StefanE你的願望成真:P –