0

我有一个包含一列的 db 表display_order。数据如下所示:

2 
4 
7 
10 
12

我想更新相同的 db 列,它应该如下所示:

1
2
3
4
5

请建议一些简单的 SQL 代码。

4

3 回答 3

4

看看ROW_NUMBER(),这将对您有所帮助。

例如,不会更新您的数据的演示,但会根据 ROW_NUMBER 向您显示当前订单和新订单

SELECT display_order AS CurrentDisplayOrder, 
    ROW_NUMBER() OVER (ORDER BY display_order) AS NewDisplayOrder
FROM YourTable
ORDER BY display_order

如果这产生了您所期望的结果,那么您可以将其切换为 UPDATE 语句。

于 2012-04-04T14:17:15.367 回答
0

扩展 AdaTheDev 的想法 - 使用 CTE(通用表表达式)可以很容易地了解如何使用实际UPDATE来更新您的表。我在@work这里使用表变量来模拟您现有的表 - 只需将我的表变量替换为您自己的表名:

DECLARE @work TABLE (display_order INT)

INSERT INTO @work VALUES(2)
INSERT INTO @work VALUES(4)
INSERT INTO @work VALUES(7)
INSERT INTO @work VALUES(10)
INSERT INTO @work VALUES(12)

SELECT * FROM @work

;WITH UpdateTable AS
(
    SELECT 
        display_order, new_order = ROW_NUMBER() OVER (ORDER BY display_order) 
    FROM @work
)
UPDATE @work
SET display_order = u.new_order
FROM @work w 
INNER JOIN UpdateTable u ON w.display_order = u.display_order

SELECT * FROM @work
于 2012-04-04T14:20:55.220 回答
0

没有 CTE(但需要表中的一些键)

declare @tbl table(id int primary key identity(1,1),Value int)
insert @tbl values(2)
insert @tbl values(5)
insert @tbl values(3)

select * from @tbl 

select *, ROW_NUMBER() over(order by Value) from @tbl order by id

update @tbl set Value = result from @tbl tbl 
inner join (select id, ROW_NUMBER() over(order by Value) result from @tbl ) hlp    on tbl.id =hlp.ids

select * from @tbl 
于 2012-04-04T14:30:34.763 回答