Sql 如何重新排列某些列的数字数据

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。如果我有这样的数据列:

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更改数字,第二列中的数据必须保持原样