SQL Server:在递增id的同时逐个更新多行

时间:2018-06-01 18:04:42

标签: sql sql-server

我对SQL很陌生,我认为过了一段时间后我很习惯使用它,但它仍然很难。我想增加ID。我知道我可以使用自动增量,但在这种情况下,id与几个类别有关系所以它必须从不同的数字开始,所以我不能这样做。

表格如下所示:

id     category
----------------
1000   1
1000   1
...
2000   2
2000   2
...

我想成功:

id     category
------------------
1000   1
1001   1
1002   1
...
2000   2
2001   2
...

我试过了:

UPDATE T1
SET id = CASE 
             WHEN EXISTS (SELECT id FROM STYLE WHERE T1.id = id)
                THEN (SELECT MAX(CAST(id AS INT)) + 1  
                      FROM STYLE 
                      WHERE category = T1.category) 
         END
FROM STYLE T1 
WHERE idStyle = idStyle

但它只是为所有行添加了1。我怎么能一个接一个地去,所以它实际上可以得到递增的最大id?谢谢。

2 个答案:

答案 0 :(得分:2)

您可以改为使用row_number()功能:

select *, 
       concat(cid, row_number() over (partition by id order by category)-1) as NewId
from style s;

答案 1 :(得分:2)

在实际样本数据的缺席中,这是一个伪sql,但是,像... ...

UPDATE YT
----SELECT NULL as Ihave no context of other fields in your table
SET id = id + ROW_NUMBER() OVER (PARTITION BY category ORDER BY (SELECT NULL)) - 1
FROM YourTable YT;