Ren*_*ndy 0 sql sql-server stored-procedures
我有一个表格,其中包含一个名为"得分"的列.我想编写一个循环遍历此表中所有行的过程,并确定所有行的位置,每个特定的行排名,即最大分数是等级1,最小分数= n.
到目前为止,这是我的不良尝试:
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @Rank INT = 0;
DECLARE @UserID UNIQUEIDENTIFIER;
DECLARE cur CURSOR FOR SELECT UserID FROM tblMember
OPEN cur
FETCH NEXT FROM cur INTO @UserID
--loop through all users
WHILE @@FETCH_STATUS = 0 BEGIN
SELECT @Rank = ROW_NUMBER() OVER(ORDER BY Score DESC) FROM tblDetails WHERE UserID = @UserID;
PRINT @Rank
Print ' For '
Print @UserID;
UPDATE tblDetails SET Rank = @Rank WHERE UserID = @UserID;
FETCH NEXT FROM cur INTO @UserID
END
END
Run Code Online (Sandbox Code Playgroud)
不幸的是,这种努力将每个条目排在1 - 可能是因为查询具有WHERE子句来细化结果集.但我无法确定正确的查询应该是什么!
WITH q AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY userId ORDER BY score DESC) rn
FROM tblDetail
)
UPDATE q
SET rank = rn
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
437 次 |
| 最近记录: |