0

我有一个非常快速的问题。我有一系列订单,每个订单都有优先级。优先级可以是NULLINT。时不时地我想从1开始安排优先级。

例如:

NULL, NULL, 5, NULL, 7, NULL, NULL, 15

将其更改为

NULL, NULL, 1, NULL, 2, NULL, NULL, 3

UPDATE实现此目的最有效的 SQL语法是什么?任何想法?我找不到存档的好方法,只能使用光标。

干杯,山姆

编辑 - 按照 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

谢谢!

4

1 回答 1

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
于 2017-01-14T16:46:29.920 回答