如何在SQL中按随机顺序洗牌行并将结果保存在新表中?
所以我有一张叫“顾客”的桌子如何在SQL中按随机顺序洗牌行并将结果保存在新表中?,sql,sql-server,random,Sql,Sql Server,Random,所以我有一张叫“顾客”的桌子 id | name ------------ 1 Tom 2 Bob 3 Sam 4 Angel 5 Joe selec
id | name
------------
1 Tom
2 Bob
3 Sam
4 Angel
5 Joe
select Name into TestTable from Customer order by NEWID()
select * from TestTable
我想以随机顺序选择“name”列中的行,并将这些行插入到新表中,我尝试了以下方法
select Name into TestTable from Customer order by NEWID()
select * from TestTable
但它不起作用?TestTable中的行与原始表中的行顺序相同
select Name into TestTable from Customer order by NEWID()
select * from TestTable
Tom
Bob
Sam
Angel
Joe
我尝试了多次执行,但每次的结果都是一样的。看起来这些行是在随机化发生之前插入到新表中的。有什么想法吗?表格中的行没有顺序。它们代表无序的集合。如果希望行按随机顺序排列,则在提取行时按顺序排列:
select Name into TestTable from Customer order by NEWID()
select * from TestTable
select name
from testtable
order by newid();
或者,您可以添加一个标识
列,该列应保留分组依据的顺序
:
select Name into TestTable from Customer order by NEWID()
select * from TestTable
select identity(int) as id, Name
into TestTable
from Customer order by NEWID();
select *
from TestTable
order by id;
他是一把小提琴
select Name into TestTable from Customer order by NEWID()
select * from TestTable
注意:事实上,我很惊讶您的示例不适用于一小部分数据。我可能猜这是SQL Server实现的一种优化,以避免对数据进行排序,因为它知道表是无序的。然而,identity()
函数用于保持顺序
select Name into TestTable from Customer order by NEWID()
select * from TestTable