我有以下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)
谢谢
答案 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或更高版本,则可以使用CTE和ROW_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
分配新生成的行号。