SQL UPDATE语法自动重新排列数字

时间:2017-01-14 16:37:51

标签: sql sql-server sql-update sql-server-2016-express

我有一个非常快速的问题。我有一系列订单,每个订单都有优先权。优先级可以是 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

谢谢!

1 个答案:

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