2016-11-30 44 views
0

表格的第一列是日期。如何根据SQL中的Date列进行排序时更新表?

我需要根据日期(降序)实际更新表时对其余数据进行排序。我不能一起使用UPDATE和ORDER BY。

我尝试使用类似这样的帖子的内容:

UPDATE Test 
SET Number = rowNumber 
FROM Test 
INNER JOIN 
    (SELECT ID, row_number() OVER (ORDER BY ID DESC) as rowNumber 
    FROM Test) drRowNumbers ON drRowNumbers.ID = Test.ID 

SQL Server: UPDATE a table by using ORDER BY

但我不能混用row_number和日期。

任何帮助将不胜感激。

+0

不能你只要运行第二个查询排序,并在更新使用ROW_NUMBER()OVER(ORDER BY date_column)? – Dan

+0

我不能把date_column放在ROW_Number里面。我收到消息 “操作数类型冲突:bigint与日期不兼容” ROW_Number返回bigint –

回答

0

使用CTE:

这里检查它:http://rextester.com/NGTM78965

create table #t1 (id int, d datetime, rown int); 
insert into #t1 values (1,'2016-05-01',0); 
insert into #t1 values (2,'2016-05-04',0); 
insert into #t1 values (3,'2016-06-01',0); 
insert into #t1 values (4,'2016-04-03',0); 
insert into #t1 values (5,'2016-05-12',0); 
insert into #t1 values (6,'2016-08-01',0); 
insert into #t1 values (7,'2016-05-15',0); 
insert into #t1 values (8,'2016-05-25',0); 

with cte (id, d, r) as 
(
select id, d, row_number() over (order by d) r 
from #t1 
) 
update #t1 
set #t1.rown = cte.r 
from cte inner join #t1 on #t1.id = cte.id; 

select * from #t1 order by d 
+0

嗨。我跑了这一个。所创建的表格仍未排序。只有显示器是。 –

+0

我已经在所有行中创建了rown = 0的表,然后在更新之后,我向您显示实际值,rown已被修改。 'select * from#t1 order by d' – McNets

+0

我的不好。我以前不太明白。但是这种方法对我有用!非常感谢! –

相关问题