SQL:使用基于2列的增量编号更新列

时间:2018-08-01 06:39:12

标签: sql sql-server

我有2列,我需要用Update语句对其中之一进行重新排序。

这里是一个例子:

日期时间---------优先级

2018年7月20日10

2018年7月21日3

2018年7月21日13

2018年7月21日4

2018年7月22日23

2018年7月23日3

23.07.2018

我需要得到这个:

日期时间---------优先级

20.07.2018

2018年7月21日10

2018年7月21日20

2018年7月21日30

22.07.2018

2018年7月23日10

23.07.2018

我需要根据当前订单和日期更改“优先级”列。新订单应以10 ... 10,20,30,40,50 ...

分隔

有人可以帮忙吗?谢谢。

3 个答案:

答案 0 :(得分:2)

您可以尝试使用row_number函数

进行以下查询
update A
set Priority= 10*rn 
from TableA A inner join

( select  date_time, row_number() over(partition by Date_time order by Date_time  ) as rn from TableA
 ) as B
 on A.Date_time=B.Date_time

答案 1 :(得分:1)

CREATE TABLE #Table1
    ([Date_time] varchar(10), [Priority] int)
;

INSERT INTO #Table1
    ([Date_time], [Priority])
VALUES
    ('20.07.2018', 10),
    ('21.07.2018', 3),
    ('21.07.2018', 13),
    ('21.07.2018', 4),
    ('22.07.2018', 23),
    ('23.07.2018', 3),
    ('23.07.2018', 7)
with cte as
(
SELECT *
    ,row_number() OVER (
        PARTITION BY REPLACE([Date_time], '.', '-') ORDER BY [Priority]
        ) AS rn
FROM #Table1
) select [Date_time],(10*rn) [Priority]  from cte

输出

Date_time   (No column name)
20.07.2018  10
21.07.2018  10
21.07.2018  20
21.07.2018  30
22.07.2018  10
23.07.2018  10
23.07.2018  20

答案 2 :(得分:1)

用您的表名替换[Table Name]

;with cte as 
(
select DENSE_RANK() over(partition by date_time order by priority)*10 as newPriority,date_time,priority from [Table Name]
)
update [Table Name] set [priority]= newPriority from cte 
where [Table Name].[priority]=cte.priority and [Table Name].Date_time=cte.Date_time