SQL现有列条件更新查询

时间:2012-06-12 09:35:46

标签: sql sql-server sql-server-2008

我有这个数据

AnsID  QuesID  AnsOrder
-----------------------
1       5       NULL
2       5       NULL
3       5       NULL
4       5       NULL
5       5       NULL
6       3       NULL
7       3       NULL
8       3       NULL
9       3       NULL
10      3       NULL
11      4       NULL
12      4       NULL
13      4       NULL
14      4       NULL
15      4       NULL
16      7       NULL
17      9       NULL
18      9       NULL
19      9       NULL
20      9       NULL
21      8       NULL
22      8       NULL
23      8       NULL
24      8       NULL

想要将其更新为此格式

AnsID  QuesID  AnsOrder
-----------------------

1       5       1
2       5       2
3       5       3
4       5       4    
5       5       5
6       3       1
7       3       2
8       3       3
9       3       4
10      3       5
11      4       1
12      4       2
13      4       3
14      4       4
15      4       5
16      7       1
17      9       1
18      9       2
19      9       3
20      9       4
21      8       1
22      8       2
23      8       3
24      8       4

Basicaly我想根据QuesID列按升序更新AnsOrder列, 这样可以提高可读性。

AnsID  QuesID  AnsOrder
-----------------------

1       5       1
2       5       2
3       5       3
4       5       4    
5       5       5

6       3       1
7       3       2
8       3       3
9       3       4
10      3       5

11      4       1
12      4       2
13      4       3
14      4       4
15      4       5

16      7       1

17      9       1
18      9       2
19      9       3
20      9       4

21      8       1
22      8       2
23      8       3
24      8       4

1 个答案:

答案 0 :(得分:3)

您可以通过quesID生成row_numbers,并将它们分配给AnsOrder,如下所示:

; with ord as (
  select *,
         row_number() over (partition by quesID
                            order by AnsID) rn
    from table1
)
update ord 
   set ansorder = rn

我已经通过AnsID订购了一致性。 Check this @ Sql Fiddle