业务部门有个需求是,
select查询出来的数据直接是按照预定规则排好序的,
不需要order by 手动排序
下面利用模式数据测试,
源表如下
在Oracle 或 Mysql 中 可以使用
create table New_Score as select * from Score order by Chinese desc
将排序后的结果写入新的表中
select * from New_Score
但在SQL Server 中 使用
Select * into New_Score from Score order by Chinese
或者
insert into New_Score(Class,Student,Chinese,Math,English)
select * from Score order by Chinese
却无法将排序后的结果写入新表中
要提前排序insert into 表需要使用
Row_number() Over( order by xxx )函数
select
ROW_NUMBER() OVER(order by Chinese desc) as PM,
Class,Student,Chinese,Math,English
into New_Score
from [dbo].[Score]
select * from Score
select * from New_Score
可以看到效果跟
select * from Score order by Chinese Desc
是一样的
Insert into 时也可以用该方法
insert into New_Score(PM,Class,Student,Chinese,Math,English)
select
ROW_NUMBER() OVER(order by Chinese desc) as PM,
Class,Student,Chinese,Math,English
from [dbo].[Score]
注意:
应该把排序字段设置成聚集索引,否则当数据量较大时,不会按照指定的顺序 insert 到表里