如何重新排列某些列的数值数据

时间:2014-11-07 12:15:32

标签: sql sql-server

我想要重新排列列中的数值数据,例如BookID。如果我的列包含这样的数据:

BookID ; BookTitle
  1         name1
  4         name2
 11        name3

我如何重新排列看起来像这样:

BookID ; BookTitle
 0         name1
 1         name2
 2         name3

3 个答案:

答案 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;

按预期结果修改