SQL 更新语法以自动重新排列数字
SQL UPDATE syntax to auto rearrange number
我有一个非常快速的问题。我有一系列订单,其中每个订单都可以有优先权。优先级可以是 NULL 或 INT。时不时想把优先级从1开始往后排。
例如:
NULL, NULL, 5, NULL, 7, NULL, NULL, 15
改为
NULL, NULL, 1, NULL, 2, NULL, NULL, 3
最有效的 SQL UPDATE
语法是什么?任何的想法?我找不到一个好的方法来存档这个,只能使用游标。
干杯,
山姆
编辑 - 根据 Giorgos Betsos 的要求
架构(针对问题进行了简化)
CREATE TABLE [dbo].[tblOrder]
(
[OrderId] [int] NOT NULL,
[Priority] [int] NULL,
CONSTRAINT [PK_tblOrder]
PRIMARY KEY ([OrderId] ASC)
)
示例输出
Order Id | Priority
---------+---------
12343 | NULL
12344 | NULL
...
...
...
12449 | 5
12450 | NULL
12451 | 7
...
...
...
12900 | NULL
12901 | NULL
12902 | 15
谢谢!
经过澄清,您可以使用的查询类似于:
;WITH ToUpdate AS (
SELECT Priority,
ROW_NUMBER() OVER (ORDER BY Orderid) AS rn
FROM tblOrder
WHERE Priority IS NOT NULL
)
UPDATE ToUpdate
SET Priority = rn
我有一个非常快速的问题。我有一系列订单,其中每个订单都可以有优先权。优先级可以是 NULL 或 INT。时不时想把优先级从1开始往后排。
例如:
NULL, NULL, 5, NULL, 7, NULL, NULL, 15
改为
NULL, NULL, 1, NULL, 2, NULL, NULL, 3
最有效的 SQL UPDATE
语法是什么?任何的想法?我找不到一个好的方法来存档这个,只能使用游标。
干杯, 山姆
编辑 - 根据 Giorgos Betsos 的要求
架构(针对问题进行了简化)
CREATE TABLE [dbo].[tblOrder]
(
[OrderId] [int] NOT NULL,
[Priority] [int] NULL,
CONSTRAINT [PK_tblOrder]
PRIMARY KEY ([OrderId] ASC)
)
示例输出
Order Id | Priority
---------+---------
12343 | NULL
12344 | NULL
...
...
...
12449 | 5
12450 | NULL
12451 | 7
...
...
...
12900 | NULL
12901 | NULL
12902 | 15
谢谢!
经过澄清,您可以使用的查询类似于:
;WITH ToUpdate AS (
SELECT Priority,
ROW_NUMBER() OVER (ORDER BY Orderid) AS rn
FROM tblOrder
WHERE Priority IS NOT NULL
)
UPDATE ToUpdate
SET Priority = rn