Sql 如何在选择和排序TOP结果后操作输出

Sql 如何在选择和排序TOP结果后操作输出,sql,sql-server,Sql,Sql Server,错误: Msg 156,级别15,状态1,服务器NS544979,过程,第0行 关键字“TOP”附近的语法不正确。 [42000][Microsoft][SQL Server本机客户端11.0][SQL Server]关键字“TOP”附近的语法不正确。156 我已在查询中成功选择并订购了PvPExp 我想为1 Top结果设置PVPLEVEL=26。那不行 然后,我想把2-5的结果设置为一个特定的值 诸如此类。请帮助了解窗口功能: USE DNWorld GO SELECT TOP (100)

错误:

Msg 156,级别15,状态1,服务器NS544979,过程,第0行 关键字“TOP”附近的语法不正确。 [42000][Microsoft][SQL Server本机客户端11.0][SQL Server]关键字“TOP”附近的语法不正确。156

我已在查询中成功选择并订购了PvPExp

我想为1 Top结果设置PVPLEVEL=26。那不行

然后,我想把2-5的结果设置为一个特定的值

诸如此类。请帮助了解窗口功能:

USE DNWorld
GO

SELECT TOP (100) WITH TIES PvPExp 
FROM PvPRanking
ORDER BY PVPExp DESC

UPDATE PVPRanking
SET PVPLevel = 26 
WHERE TOP(1) = 1

您可以将行号与CTE一起使用。即:

.............................
SET PVPLevel = CASE rn
  WHEN 1 THEN 26
  WHEN 2 THEN ?
  WHEN 3 THEN ?
  WHEN 4 THEN ?
  WHEN 5 THEN ?
END 
.............................

你需要的可能是排名,邓瑟兰。。。而不是根据您的实际需要来选择排号。

非常感谢您的帮助。这不是我需要的答案,但它帮助我了解我应该从哪里开始,我应该做什么。如果你还在,我确实有一个问题。有没有办法缩短这个时间?示例集PVPLEVEL=Case rn当rn介于2和10之间时,则5表示2-10被赋值5检查此示例的语法:Case When rn=1时,则26当rn介于2和10之间时,则5 end但如果有where子句,例如:where rnWell,我将扩展此列表以获得当前的顶级结果。我理解您提出的第一个解决方案,但语法不正确。[42000][Microsoft][SQL Server本机客户端11.0][SQL Server]靠近“=”的语法不正确。谢谢你终于解决了!当cte为SELECT*时,按PVPExp DESC作为rn从PvPRanking更新cte SET PVPLevel=CASE当rn=1时,按顺序排列,当rn在2和10之间时,按顺序排列;当rn在2和10之间时,按顺序排列;当rn在2和10之间时,按顺序排列;当rn在25之间时,按顺序排列
.............................
SET PVPLevel = CASE rn
  WHEN 1 THEN 26
  WHEN 2 THEN ?
  WHEN 3 THEN ?
  WHEN 4 THEN ?
  WHEN 5 THEN ?
END 
.............................
with rankings (PvpExp, rowNo) as
(
   SELECT PvPExp, row_number() over (order by PvpExp desc) 
   FROM PvPRanking
)
UPDATE PVPRanking 
   SET PVPLevel = case 
                  when r.rowNo = 1 then 26
                  when r.rowNo > 1 and r.rowNo < 6 then xx
                  -- other settings
                  end
from PVPRanking pr
inner join rankings r on pr.PVPExp = r.PVPExp;