我有一个 T-SQL 查询,它从一个表中获取数据并将其复制到一个新表中,但只复制满足特定条件的行:
SELECT VibeFGEvents.*
INTO VibeFGEventsAfterStudyStart
FROM VibeFGEvents
LEFT OUTER JOIN VibeFGEventsStudyStart
ON
CHARINDEX(REPLACE(REPLACE(REPLACE(logName, 'MyVibe ', ''), ' new laptop', ''), ' old laptop', ''), excelFilename) > 0
AND VibeFGEventsStudyStart.MIN_TitleInstID <= VibeFGEvents.TitleInstID
AND VibeFGEventsStudyStart.MIN_WinInstId <= VibeFGEvents.WndInstID
WHERE VibeFGEventsStudyStart.excelFilename IS NOT NULL
ORDER BY VibeFGEvents.id
使用表的代码依赖于它的顺序,上面的副本没有保留我期望的顺序。 IE。新表 VibeFGEventsAfterStudyStart
中的行在从 VibeFGEvents.id
复制的 VibeFGEventsAfterStudyStart.id
列中并非单调递增。
在 T-SQL 中,如何保留 VibeFGEventsStudyStart
中 VibeFGEvents
的行顺序?
最佳答案
我知道这有点旧了,但我需要做类似的事情。我想将一个表的内容插入到另一个表中,但顺序是随机的。我发现可以通过使用 select top n
和 order by newid()
来做到这一点。如果没有“top n”,则不会保留顺序,第二个表的行顺序与第一个表的顺序相同。然而,对于“top n”,顺序(在我的例子中是随机的)被保留。我使用的“n”值大于行数。所以我的查询是这样的:
insert Table2 (T2Col1, T2Col2)
select top 10000 T1Col1, T1Col2
from Table1
order by newid()
关于sql-server - 在 SELECT INTO 中保留 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14424929/