2011-11-15 20 views
5

Xét bảng này:Cập nhật resultset với cấp bậc

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

Tôi cố gắng để viết T-SQL mà không có EventId như là đầu vào và sử dụng RANK chức năng để xếp hạng theo điểm số, nhưng với các phần tách ra (Xếp hạng cá nhân cho từng bộ phận, Hạng 1 cho số điểm cao nhất trong mỗi phần và vân vân) và sau đó thiết lập/cập nhật các giá trị Rank

Trả lời

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 nó đang chạy trên Sede.

+3

Làm việc hoàn hảo, ước gì tôi có thể cung cấp cho bạn nhiều phiếu bầu! – StefanE

+0

@StefanE mong muốn của bạn đã thành hiện thực: P –

Các vấn đề liên quan