2013-03-21 41 views
0

假设我以前已经声明了一个名为#temp的表,它的计数为NULL值,后来我想在脚本中更新该列,我该怎么做?无法更新列窗口函数错误

count --- CAM 

1  201 
1  2 
1  2012 
2  20 

我有这将是更新语句:

更新#TEMP将[数] =((ROW_NUMBER()以上(由CAM降序顺序)-1/3)+1

然而,它给了我下面的错误: 窗函数只能出现在SELECT或ORDER BY子句

我曾尝试使用select语句很多不同的方式,但没有运气!任何帮助

回答

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是唯一的,这将工作。

+0

感谢工作像一个魅力:) – 2013-03-21 01:35:11