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