Как перемешать строки в случайном порядке в SQL и сохранить результаты в новой таблице? - PullRequest
0 голосов
/ 19 октября 2019

Итак, у меня есть таблица с именем Customers

                     id  | name
                    ------------
                     1     Tom
                     2     Bob
                     3     Sam
                     4     Angel
                     5     Joe

Я хочу выбрать строки в столбце 'name' в случайном порядке и вставить эти строки в новую таблицу, я попробовал это

       select Name into TestTable from Customer order by NEWID() 
       select * from TestTable

Но это не работает? Строки в TestTable находятся в том же порядке, в котором они были в исходной таблице.

                         Tom
                         Bob
                         Sam
                         Angel
                         Joe

Я пытался выполнить несколько раз, но результат всегда один и тот же. Кажется, что строки вставляются в новую таблицу до того, как произойдет рандомизация. Есть идеи?

1 Ответ

1 голос
/ 19 октября 2019

Строки в таблице не имеют порядка. Они представляют неупорядоченные наборы. Если вы хотите, чтобы строки располагались в случайном порядке, то при извлечении их следует упорядочить:

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 <> скрипка.

Примечание. На самом деле я удивлен, что ваш пример не работает с небольшим набором данных. Я мог бы догадаться, что это оптимизация, реализованная SQL Server, чтобы избежать сортировки данных, потому что она знает, что таблицы неупорядочены. Однако функция identity() документирована для сохранения порядка.

...