我有两列,需要用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