【问题标题】:How to shuffle rows in random order in SQL and save results in new table?如何在 SQL 中以随机顺序打乱行并将结果保存在新表中?
【发布时间】:2019-10-19 13:36:45
【问题描述】:

所以我有一个名为“客户”的表

                     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

我尝试执行多次,但每次的结果都是一样的。似乎在随机化发生之前将行插入到新表中。有什么想法吗?

【问题讨论】:

    标签: sql sql-server random


    【解决方案1】:

    表中的行没有顺序。它们代表无序集。如果您希望行以随机顺序排列,则在提取它们时进行排序:

    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;
    

    Here 是一个 dbfiddle。

    注意:我真的很惊讶您的示例不适用于一小组数据。我可能猜想这是 SQL Server 为避免对数据进行排序而实现的优化,因为它知道表是无序的。然而,identity() 函数是 documented 以保持排序。

    【讨论】:

      猜你喜欢
      • 2020-10-03
      • 2018-10-11
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      相关资源
      最近更新 更多