2013-04-30 92 views
0

我想为下表编写更新脚本。无法写入更新查询

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

我想通过N到所述SortOrder列设置为1,由Id列排序。但是,我希望数字在ProgramIdEventId更改时重新启动。也就是说,我希望每行的编号顺序1 ... N具有相同的ProgramIdEventId值,然后重新启动下一个ProgramIdEventId值的编号。

我知道我可以使用ROW_NUMBER根据当前的排序得到一个行号,但是当其他两列中的一个发生改变时,我不知道该如何重新启动该号码。这甚至有可能吗?

+3

ROW_NUMBER()OVER(PARTITION BY ProgramId,EVENTID ORDER BY Id)的 – 2013-04-30 00:28:34

+0

@Aaron,是有可能粘在update语句? – 2013-04-30 03:15:03

+0

是的,@RBarryYoung已经这么做了。 – 2013-04-30 13:09:18

回答

2

像这样:

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