我有一个非常快速的问题。我有一系列订单,每个订单都有优先权。优先级可以是 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
谢谢!
答案 0 :(得分:3)
在澄清之后,您可以使用的查询类似于:
;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