SQL Update每次都会遇到x个行

时间:2015-02-23 21:16:28

标签: sql-server

我有两个列的表调用question,它包含超过160K行,例如:

id | questionID
1  | 1
2  | 2
3  | 3
4  | 4
5  | 5
6  | 6
7  | 7
8  | 8
9  | 9
10 | 10
...

我想更新questionID列,以便它看起来像下面的示例。对于每x个行,需要更新以再次从1开始设置。最终结果应该是这样的:

id | questionID
1  | 1
2  | 2
3  | 3
4  | 4
5  | 1
6  | 2
7  | 3
8  | 4
9  | 1
10 | 2
...

该表包含许多行,因此它不是手动选项。 什么是最简单的更新表格的方法? 任何帮助将不胜感激。感谢

3 个答案:

答案 0 :(得分:2)

如果您打算使用模数运算符。 SQL Server和MySQL都支持%

UPDATE question
    SET questionID =  1 + ((id - 1) % 4);

如果数字有差距,那么你需要做一些不同的事情。在这种情况下,解决方案依赖于数据库。

答案 1 :(得分:1)

只需使用模运算符:

UPDATE question
SET questionID = CASE WHEN id  % 4 = 0 THEN 4 ELSE id % 4 END

或者,如果id有差距并且您使用的是SQL Server ,那么您可以使用它:

 UPDATE q1
 SET id = (CASE WHEN q2.rn % 4 = 0 THEN 4 ELSE q2.rn % 4 END)
 FROM question q1
 INNER JOIN (
     SELECT id, ROW_NUMBER() OVER (ORDER by id) AS rn
     FROM question ) q2 ON q1.ID = q2.ID

答案 2 :(得分:0)

UPDATE question SET questionID = questionID % 4 + 1