我正在尝试更新Rank
中名为X table
的列,其中erank将是名为annual sales
的列的等级,并使用row_number () over (order by annual sales desc)
和这是一个函数,因此它不能用于更新,因为它应该只是select子句的一部分所以我们写了这样的东西:
UPDATE X
SET rank = SELECT acc_id,
annual_call,
ROW_NUMBER() OVER (ORDER BY annual sales DESC)
FROM x
GROUP BY acc_id,annual_call
但这会引发错误
答案 0 :(得分:4)
作为一般规则,当您提出问题并提及错误时,请说出 错误。它帮助我们帮助你,你不必把它变成一部神秘的小说......
以下是您的操作方法:
with cte as (
select [rank], row_number() over (
partition by acc_id, annual_call
order by [annual sales] desc) as [row_number]
from x)
update cte
set [rank] = [row_number];
当然,坚持这样的等级通常是注定的,因为它在第一次更新后会变得不正确,但这是一个不同的主题。
答案 1 :(得分:0)
这里虽然
set rank = select acc_id,annual_call,row_number ()
over (order by annual sales desc)
from x
必须只选择1列,您必须为此实现其他逻辑。因为分配值必须只返回一列。