如何重置列值
how to reset the column value
我有 table 9 条记录,删除了 2 条 _id = 1 的记录:
id | name | index | _id
1 a 1 1
8 b 3 1
9 c 7 1
10 d 4 1
15 e 2 1
16 d 1 2
17 e 2 2
我想像这样重置 _id = 1 的索引:
id | name | index | _id
1 a 1 1
8 b 2 1
9 c 3 1
10 d 4 1
15 e 5 1
16 d 1 2
17 e 2 2
我会使用这个查询
declare @_idCount int = (select count(*) from tbl where _id = 1),
@index int = 1
while(@_idCount > 0)
begin
update tbl
set code = @index
where _id = 1
set @index = @index + 1
set @picCount = @picCount - 1
end
但此代码已设置为使用相同代码的所有记录。
我能做些什么来解决它?
您可以简单地使用 ROW_NUMBER
:
WITH CTE AS
(
SELECT id,
name,
[index],
[_id],
new_index = ROW_NUMBER() OVER(PARTITION BY [_id]
ORDER BY [id])
FROM dbo.tbl
)
UPDATE CTE
SET [index] = new_index;
我有 table 9 条记录,删除了 2 条 _id = 1 的记录:
id | name | index | _id
1 a 1 1
8 b 3 1
9 c 7 1
10 d 4 1
15 e 2 1
16 d 1 2
17 e 2 2
我想像这样重置 _id = 1 的索引:
id | name | index | _id
1 a 1 1
8 b 2 1
9 c 3 1
10 d 4 1
15 e 5 1
16 d 1 2
17 e 2 2
我会使用这个查询
declare @_idCount int = (select count(*) from tbl where _id = 1),
@index int = 1
while(@_idCount > 0)
begin
update tbl
set code = @index
where _id = 1
set @index = @index + 1
set @picCount = @picCount - 1
end
但此代码已设置为使用相同代码的所有记录。 我能做些什么来解决它?
您可以简单地使用 ROW_NUMBER
:
WITH CTE AS
(
SELECT id,
name,
[index],
[_id],
new_index = ROW_NUMBER() OVER(PARTITION BY [_id]
ORDER BY [id])
FROM dbo.tbl
)
UPDATE CTE
SET [index] = new_index;