Row_number函数

时间:2011-03-23 04:45:55

标签: sql sql-server sql-server-2005 tsql

我正在尝试更新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

但这会引发错误

2 个答案:

答案 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列,您必须为此实现其他逻辑。因为分配值必须只返回一列。