sql - 如何在 SQL 中以随机顺序打乱行并将结果保存在新表中?
问题描述
所以我有一张名为“客户”的表
id | name
------------
1 Tom
2 Bob
3 Sam
4 Angel
5 Joe
我想以随机顺序选择“名称”列中的行,并将这些行插入到新表中,我试过了
select Name into TestTable from Customer order by NEWID()
select * from TestTable
但它不起作用?TestTable 中的行与它们在原始表中的顺序相同。
Tom
Bob
Sam
Angel
Joe
我尝试执行多次,但每次结果都相同。似乎在随机化发生之前将行插入到新表中。有任何想法吗?
解决方案
表中的行没有顺序。它们代表无序集。如果您希望行以随机顺序排列,则在提取它们时进行排序:
select name
from testtable
order by newid();
或者,您可以添加一identity
列,该列应保留以下的顺序group by
:
select identity(int) as id, Name
into TestTable
from Customer order by NEWID();
select *
from TestTable
order by id;
这是一个 db<>fiddle。
注意:我真的很惊讶您的示例不适用于一小组数据。我可能猜想这是 SQL Server 为避免对数据进行排序而实现的优化,因为它知道表是无序的。但是,该identity()
功能已记录在案以保留顺序。
推荐阅读
- video - 使用 Raspbian Stretch 在 Raspberry Pi 3 上使用 gstreamer 播放视频
- python - 装饰器中的控制流
- linux - Ubuntu VM 不会无限期地在后台运行任务
- javascript - webview的onDownloadStart参数没有设置?如何检索文件名?
- flask - Jinja if 语句无法正确执行
- stata - 散点图上的叠加线
- php - PHP查找键值数组并替换
- html - 在 Chrome 上溢出,但在 Firefox 上没有
- scrollmagic - 与div相关的带有scrollmagic的pin元素
- c# - 我在使用 c# 发送电子邮件时出现异常