Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как перемешать записи в таблице?  [new]
DEFENDER13
Member

Откуда:
Сообщений: 13
Всем привет! Такой вопрос. имеется таблица
Код Вариант
1 Петров
2 Иванов
3 Сидоров
4 Петухов
Можно ли как то перемешать эти записи? Спасибо!
7 апр 13, 11:39    [14146764]     Ответить | Цитировать Сообщить модератору
 Re: Как перемешать записи в таблице?  [new]
гм,
Guest
DEFENDER13,

ты уже спрашивал
Перемешка записей
7 апр 13, 11:42    [14146775]     Ответить | Цитировать Сообщить модератору
 Re: Как перемешать записи в таблице?  [new]
DEFENDER13
Member

Откуда:
Сообщений: 13
гм,,

там таблица по другому была устроена!
7 апр 13, 11:44    [14146783]     Ответить | Цитировать Сообщить модератору
 Re: Как перемешать записи в таблице?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
ну, например, так
declare @TEST table (id int identity, name nvarchar(100))
insert @TEST values('rec1'),('rec2'),('rec3'),('rec4'),('rec5'),('rec6')
select * from @TEST order by checksum(newid())%111
7 апр 13, 12:16    [14146879]     Ответить | Цитировать Сообщить модератору
 Re: Как перемешать записи в таблице?  [new]
aleks2
Guest
-- ну, в контексте премешать ВСЕ - это ишо канает
declare @TEST table (id int identity, name nvarchar(100))
insert @TEST values('rec1'),('rec2'),('rec3'),('rec4'),('rec5'),('rec6')
select * from @TEST order by checksum(newid())%111

-- хотя нахера checksum(...)%111?
-- это проще и НЕ хуже
select * from @TEST order by newid()

-- аднако, такие вопросы, обычно, задают фсякие тестописатели - им надо "случайным образом" выбирать задания для теста
-- А вот тут херачить скан ВСЕЙ таблицы идеологически неверно

declare @n int =4, @maxID int = (select max(ID) from @TEST);
declare @nn table(n int);

while @n > 0 begin
  insert @nn 
     select n
       from (select cast(RAND()*@maxID as int)+1 as n ) x
     where not exists(select *  from @nn where n=x.n ); 
  if @@rowcount > 0 set @n = @n-1;
end;

select T.* from 
@TEST T inner join @nn x on T.id = x.n
7 апр 13, 12:40    [14146925]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить