Sql 如何重新排列某些列的数字数据
我要做的是重新排列列中的数字数据,例如BookID。如果我有这样的数据列:Sql 如何重新排列某些列的数字数据,sql,sql-server,Sql,Sql Server,我要做的是重新排列列中的数字数据,例如BookID。如果我有这样的数据列: BookID ; BookTitle 1 name1 4 name2 11 name3 BookID ; BookTitle 0 name1 1 name2 2 name3 我如何重新排列,使其看起来像这样: BookID ; BookTitle 1 name1 4 n
BookID ; BookTitle
1 name1
4 name2
11 name3
BookID ; BookTitle
0 name1
1 name2
2 name3
我如何重新排列,使其看起来像这样:
BookID ; BookTitle
1 name1
4 name2
11 name3
BookID ; BookTitle
0 name1
1 name2
2 name3
这是你想要的吗
select row_number() over (order by BookId) - 1 as BookId, BookTitle
from books b;
如果要更改数据中的ID,可以这样做。但是,不建议这样做。行上的主键不需要有任何含义。例如,它用于其他表中的外键引用,如果更改原始表中的值,也需要在原始表中进行更改。按顺序更新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
您可以使用通用表表达式和排名函数重新编号:
;WITH ranked AS
(
SELECT BookID
, NewBookID = ROW_NUMBER() OVER (ORDER BY BookTitle) -1
FROM books
)
UPDATE ranked
SET BookID = NewBookID;
根据预期结果修改我认为您可以在查询中添加行号()-1,因为它在example@arunb2w . . . 谢谢。当我这样做的时候,结果就像这样:BookID;BookTitle 0 name1 name2 name3>但当我从书本中选择*时,它不是保存更改。结果就像第一次一样table@dejan . . . 这是因为我强烈地、强烈地、强烈地不鼓励您在记录创建后更改其主键。是否要更改条目ID的值?你为什么要这样做?您确定更改不会导致不可预测的结果吗?你会更新对ID的所有引用吗?怎么用?为什么?或者您只是想查询带有行号的条目吗?只是为了从BookID更改数字,第二列中的数据必须保持原样