【问题标题】:Sort with Insert statement使用插入语句排序
【发布时间】:2020-02-17 19:19:32
【问题描述】:

我在 SQL 中计算线性回归,需要保留 #regression_data 表中的排序顺序。

我正在创建时间序列回归,而 row_number() 正在创建 X 值的计数。回归需要保持正确的排序顺序才能正常运行。

当我不插入临时表时,以下代码可以正常工作,因为我有能力进行排序。即使我使用不创建临时表,我也不相信我在派生查询中排序。

如果 object_id('tempdb..#regression_data') 不为空,则开始删除表 #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

´ 按[出发年份]、[预订年份]、[分拣机]排序

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql


【解决方案1】:

最简单的是将排序移动到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];

order byinsert 毫无意义的一个例外是identity 尊重排序。

请注意,对于这两种方法,您在查询表时必须使用order by

select rd.*
from #regression_data rd
order by x;

请参阅上面关于表格和无序集的注释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多