我有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 ...
分隔有人可以帮忙吗?谢谢。
答案 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