SQL:使用基于2列的递增数字更新列



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

下面是一个例子:

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

2018年7月20日 nbsp nbsp nbsp nbsp nbsp;10

2018年7月21日 nbsp nbsp nbsp nbsp nbsp;3

2018年7月21日 nbsp nbsp nbsp nbsp nbsp;13

2018年7月21日 nbsp nbsp nbsp nbsp nbsp;4

2018年7月22日 nbsp nbsp nbsp nbsp nbsp;23

2018年7月23日 nbsp nbsp nbsp nbsp nbsp;3

2018年7月23日 nbsp nbsp nbsp nbsp nbsp;7

我需要得到这个:

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

2018年7月20日 nbsp nbsp nbsp nbsp nbsp;10

2018年7月21日 nbsp nbsp nbsp nbsp nbsp;10

2018年7月21日 nbsp nbsp nbsp nbsp nbsp;20

2018年7月21日 nbsp nbsp nbsp nbsp nbsp;30

2018年7月22日 nbsp nbsp nbsp nbsp nbsp;10

2018年7月23日 nbsp nbsp nbsp nbsp nbsp;10

2018年7月23日 nbsp nbsp nbsp nbsp nbsp;20

我需要根据当前订单和日期更改"优先级"列。新订单应以10…10、20、30、40、50…分隔

有人能帮忙吗?谢谢

您可以使用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
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

[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

最新更新