sql - SQL Server:在递增 id 的同时一一更新多行
问题描述
我对 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 添加到所有行。我怎么能 1 乘 1 所以它实际上可以获得递增的最大 id?谢谢你。
解决方案
您可以改用row_number()
函数:
select *,
concat(cid, row_number() over (partition by id order by category)-1) as NewId
from style s;