请教,SQL Rank排序后保存结果

xiehuangda 2018-10-04 05:07:13
请教,SQL Rank排序后保存结果

请教各位,排名后保存结果到k2列。

表名:tMember
列:mID,mName,k1,k2
数据类型:mID是主键int,mName是字符串类,k1,k2都是int

k1中是学生成绩列,k2是排序列。
通过SQL语句能查询并且排序出来,请教用什么语句能把排序保存到k2中。

Select Dense_Rank() Over (Order By k1 desc) From tMember
通过这个语句可以把成绩查询排名出来。请教如何保存结果到k2。

尝试过以下语句失败。
Update tMember Set k2=(Select Dense_Rank() Over (Order By k1 desc) From tMember)

还尝试过以下语句,依然失败。
Update tMember Set k2=(Select Dense_Rank() Over (Order By k1 desc) From tMember as a Where a.mID=tMember.mID)

请教各位,排名后保存结果到k2列。
...全文
338 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2018-10-04
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('tMember') IS NOT NULL DROP TABLE tMember
GO
CREATE TABLE tMember(
mID INT PRIMARY KEY,
mName NVARCHAR(10),
k1 INT,
k2 INT
)
SET NOCOUNT ON
INSERT INTO tMember(mID,mName,k1) VALUES(1,'小明',80)
INSERT INTO tMember(mID,mName,k1) VALUES(2,'小华',80)
INSERT INTO tMember(mID,mName,k1) VALUES(3,'小刚',95)
INSERT INTO tMember(mID,mName,k1) VALUES(4,'小李',90)
------------ 以上为测试表及测试数据 ---------------

--方法1
;WITH cte AS (
Select Dense_Rank() Over (Order By k1 desc) AS rid,* From tMember
)
UPDATE cte SET k2=rid

--方法2
UPDATE t
SET k2=rid
FROM
(
Select Dense_Rank() Over (Order By k1 desc) AS rid,* From tMember
) AS t INNER JOIN tMember AS tm ON t.mID=tm.mID

--查看更新结果
SELECT * FROM tMember AS tm ORDER BY tm.k2
/*
mID mName k1 k2
----------- ---------- ----------- -----------
3 小刚 95 1
4 小李 90 2
1 小明 80 3
2 小华 80 3
*/

11,849

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧