我想要重新排列列中的数值数据,例如BookID。如果我的列包含这样的数据:
BookID ; BookTitle
1 name1
4 name2
11 name3
我如何重新排列看起来像这样:
BookID ; BookTitle
0 name1
1 name2
2 name3
答案 0 :(得分:1)
这是你想要的吗?
select row_number() over (order by BookId) - 1 as BookId, BookTitle
from books b;
如果要更改数据中的ID,可以执行此操作。但是,不建议这样做。一行中的主键不需要任何含义。例如,它用于其他表中的外键引用,如果更改原始表中的值,则还需要在其中更改它。
答案 1 :(得分:0)
按顺序更新BookID。使用以下更新查询。
UPDATE A SET A.BookID = B.NewBookID
FROM Books A
INNER JOIN (
SELECT BookID, NewBookID = ROW_NUMBER() OVER (ORDER BY BookTitle) - 1
FROM Books
) AS B
ON A.BookID = B.BookID
答案 2 :(得分:0)
您可以使用公用表表达式和排名函数重新编号:
;WITH ranked AS
(
SELECT BookID
, NewBookID = ROW_NUMBER() OVER (ORDER BY BookTitle) -1
FROM books
)
UPDATE ranked
SET BookID = NewBookID;
按预期结果修改