[英]Sort with Insert statement
我正在计算 SQL 中的线性回归,并且需要在#regression_data 表中保留排序顺序。
我正在创建时间序列回归,而 row_number() 正在创建 X 值的计数。 回归需要正确地维护 function 的正确排序顺序。
当我不插入临时表时,以下代码可以正常工作,因为我有能力进行排序。 即使我使用不创建临时表,我也不相信我在派生查询中排序。
如果 object_id('tempdb..#regression_data') 不是 null 开始删除表 #regression_data 结束
Select CAST(ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as INT) 'x', CAST([Pax] as INT) 'y', *
--into #regression_data
from #TBB_Temp
´ 按 [出发年份]、[预订年份]、[分拣机] 排序
最简单的是将排序移至row_number()
:
select ROW_NUMBER() OVER (ORDER BY [Depart Year], [Booking Year], [Sorter])) as x,
CAST([Pax] as INT) as y,
t.*
--into #regression_data
from #TBB_Temp t;
SQL 表表示无序集,因此外部order by
作用很小。
另一种方法是添加一个标识列:
select identity(int) as x,
CAST([Pax] as INT) as y,
t.*
--into #regression_data
from #TBB_Temp t
order by [Depart Year], [Booking Year], [Sorter];
对insert
无意义的order by
的一个例外是identity
尊重排序。
请注意,对于这两种方法,您必须在查询表时使用order by
:
select rd.*
from #regression_data rd
order by x;
请参阅上面关于表格和无序集的注释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.