使用order by子句更新SQL Server查询

时间:2014-01-09 18:42:23

标签: sql-server

我有以下SQL Server查询,我想添加order by子句。有人可以看看QRY。

declare @variable int
set @variable = 0

UPDATE r_recipes_tmp
SET @variable = stepId = @variable + 1  

我正在尝试以下但没有运气。

declare @variable int
set @variable = 0

UPDATE r_recipes_tmp
SET @variable = stepId = @variable + 1 
WHERE stepId IN (SELECT stepId 
                 FROM r_recipes_tmp 
                 WHERE recipename = 'test' 
                 ORDER BY stepid DESC)

谢谢

1 个答案:

答案 0 :(得分:0)

似乎就像要按stepId的降序排序行,然后将新的连续值分配给stepId,但这次是按升序排列,所以基本上你想要反转行的顺序,如果stepId是排序标准。或者,使用一个示例(您尚未提供),转动如下所示的行:

stepId  someColumn
------  ----------
7       AAA
4       BBB
2       DDD
1       CCC

进入这个:

stepId  someColumn
------  ----------
1       AAA
2       BBB
3       DDD
4       CCC

如果确实如此,如果您使用的是SQL Server 2005或更高版本,则可以使用CTEROW_NUMBER() function,如下所示:

WITH newIDs AS (
  SELECT
    stepId,
    newStepId = ROW_NUMBER() OVER (ORDER BY stepId DESC)
  FROM atable
)
UPDATE newIDs
SET stepId = newStepId
;

ROW_NUMBER函数按stepId的降序分配行号,并将它们与相应的当前值stepId一起返回。由于newIDs CTE从单个表派生行,这使得CTE可以更新,因此您可以将其用作UPDATE的目标,并简单地为每个stepId分配新生成的行号。