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

Откуда:
Сообщений: 148
Имеется база, необходимо проставить признаки лишь 30% записей, и все записи должны быть случайными(Т.е не Топ 3 из 10).
В принципе, я что-то похожее сделал, но разброс очень большой:
Declare @tmp table ( ID INT PRIMARY KEY IDEnTITY (1,1),Name nvarchar(10),Priznak INT)
Declare @prc INT=30
Declare @reccnt INT
insert @tmp (name,priznak) values 
('А',Null),
('Б',Null),
('В',Null),
('Г',Null),
('Д',Null),('Е',Null)
,('Ё',Null),('Ж',Null),('З',Null),('И',Null)






While exists(select * from @tmp where priznak is Null) 
begin
Update top (1) t
set Priznak=Case when rand()*100<@prc then 1 else 0 end
from @tmp t
where priznak is null
end



select * from @tmp
order by Priznak


У меня еще была идея проставлять rand() каждой записи, а потом выполнять сортировку по рандомноу значению, потом делать Update top (Высчитанное кол-во записей, которые подходят под процент), но я что-то с сортировкой не разобрался...=(
23 июл 14, 20:43    [16348857]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать случайный % записей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
select top (30) percent
  *
from @tmp 
order by newid()


Сообщение было отредактировано: 23 июл 14, 20:46
23 июл 14, 20:46    [16348861]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать случайный % записей  [new]
iluxa1810
Member

Откуда:
Сообщений: 148
О, спасибо!
23 июл 14, 21:18    [16348944]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать случайный % записей  [new]
iluxa1810
Member

Откуда:
Сообщений: 148
Гавриленко Сергей Алексеевич,

А Апдейтить нужные записи придется через

Where id IN(select top (30) percent
id
from @tmp
order by newid())

наверное?
23 июл 14, 21:21    [16348956]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать случайный % записей  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
iluxa1810
Гавриленко Сергей Алексеевич,

А Апдейтить нужные записи придется через

Where id IN(select top (30) percent
id
from @tmp
order by newid())

наверное?
WITH CTE AS
(
select top (30) percent
  *
from @tmp 
order by newid()
)
UPDATE CTE SET ...
не прокатит?
23 июл 14, 21:27    [16348976]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать случайный % записей  [new]
iluxa1810
Member

Откуда:
Сообщений: 148
iap,

не имел опыта работы с обощенными табличными выражениями.
Т.е обновляя это выражения я обновляю и свою основную таблицу, а в обобщенном выражении содержаться только нужные мне записи?
23 июл 14, 21:44    [16349031]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать случайный % записей  [new]
iluxa1810
Member

Откуда:
Сообщений: 148
iap,
У меня ругается:

автор
Сообщение 319, уровень 15, состояние 1, строка 13
Неправильный синтаксис около ключевого слова "with". Если эта инструкция является обобщенным табличным выражением, предложением xmlnamespaces или предложением в контексте отслеживания изменений, предыдущую инструкцию необходимо завершить точкой с запятой.
Сообщение 156, уровень 15, состояние 1, строка 18
Неправильный синтаксис около ключевого слова "order".
23 июл 14, 21:56    [16349067]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать случайный % записей  [new]
iluxa1810
Member

Откуда:
Сообщений: 148
Заработало.
23 июл 14, 21:58    [16349070]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить