无法编写更新查询

时间:2013-04-30 00:01:22

标签: sql-server tsql

我想为下表编写更新脚本。

Id        int,
Title     nvarchar(100),
ProgramId int,
EventId   int,
SortOrder int

我想将SortOrder列设置为1到N,按Id列排序。但是,我希望在ProgramIdEventId更改时重新启动该号码。也就是说,我希望每行的编号序列1 ... N具有相同的ProgramIdEventId值,然后重新启动下一个ProgramId和{{的编号1}}值。

我知道我可以使用EventId根据当前排序获取行号,但是当其他两列中的一列发生更改时,我看不出如何重新启动该号码。这甚至可能吗?

1 个答案:

答案 0 :(得分:2)

像这样:

;WITH cte As
(
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY ProgramId, EventId ORDER BY Id) As RN
    FROM   YourTable
)
UPDATE  cte
SET     SortOrder = RN