0

我有 2 列,我需要使用更新语句重新排序其中之一。

这是一个例子:

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

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

我需要得到这个:

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

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

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

有人可以帮忙吗?谢谢。

4

3 回答 3

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
于 2018-08-01T06:53:30.017 回答
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
于 2018-08-01T06:53:20.767 回答
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
于 2018-08-01T07:00:03.247 回答