无法更新列窗口函数错误

时间:2013-03-21 01:04:29

标签: sql-server sql-server-2008

假设我之前已经声明了一个名为#temp的表,它被计为NULL值,后来我想在我的脚本中更新该列,我该怎么做?

count --- CAM 

 1        201 
 1        2
 1        2012
 2        20

我有更新声明:

更新#temp set [count] =((ROW_NUMBER()over(CAM desc的顺序)-1/3)+1

但是,它给了我以下错误: 窗口函数只能出现在SELECT或ORDER BY子句中。

我尝试过使用select语句的许多不同方法,但没有运气!对此有何帮助?

1 个答案:

答案 0 :(得分:2)

如果我理解你想要做什么,虽然count在这里有一个奇怪的列名称给出了它似乎持有的数据:

WITH cte AS
(
    SELECT (row_number() OVER(ORDER BY CAM DESC) - 1)/3 + 1 AS [count],
        CAM
    FROM #temp
)
UPDATE #temp
SET #temp.[count] = cte.[count]
FROM #temp
INNER JOIN cte ON #temp.CAM = cte.CAM

注意我还在括号外拉了/3 - 我相信这就是你想要的。

只要CAM是唯一的,这将有效。