Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2014, 15:55   #11
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

разницу между 1 и 2 видим?
eval вне форума Ответить с цитированием
Старый 26.05.2014, 16:41   #12
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Цитата:
разницу между 1 и 2 видим?
Только во времени выполнения
Nekit9401 вне форума Ответить с цитированием
Старый 26.05.2014, 16:55   #13
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

оставьте как есть ..
eval вне форума Ответить с цитированием
Старый 26.05.2014, 17:05   #14
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Цитата:
оставьте как есть ..
Что не так? Вы можете сказать? Я ведь не профессионал, я только изучаю эту сферу, поэтому еще много чего не знаю.
Nekit9401 вне форума Ответить с цитированием
Старый 26.05.2014, 19:24   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Без курсора и медленных циклов можно примерно так

Каждая запись из bill попадает в 100% случаев не менее 1 раза в sale
80% из них случайным образом как минимум 2 раза, 60% - 3 раза, 40% - 4 раза, 20% - 5 раз

Это можно через временные таблицы реализовать так

Код:
SELECT TOP 80 PERCENT * INTO #Temp2 FROM bill ORDER BY NEWID()
SELECT TOP 75 PERCENT * INTO #Temp3 FROM #Temp2 ORDER BY NEWID()
SELECT TOP 66 PERCENT * INTO #Temp4 FROM #Temp3 ORDER BY NEWID()
SELECT TOP 50 PERCENT * INTO #Temp5 FROM #Temp4 ORDER BY NEWID()
и теперь из объединения этих таблиц добавить в sale

Код:
INSERT INTO sale(quantity, num_bill, num_shop, num_article)
  SELECT CEILING(RAND(CHECKSUM(NewId()))*2),U.num_bill,CEILING(RAND(CHECKSUM(NewId()))*20),
      CASE DATEPART(qq,DATEADD(mm,1,U.date_bill))
      WHEN 1 THEN CASE WHEN RAND(CHECKSUM(NewId()))<=0.5 THEN CEILING(RAND(CHECKSUM(NewId()))*30)    ELSE CEILING(RAND(CHECKSUM(NewId()))*210) END
      WHEN 2 THEN CASE WHEN RAND(CHECKSUM(NewId()))<=0.5 THEN CEILING(RAND(CHECKSUM(NewId()))*29+31) ELSE CEILING(RAND(CHECKSUM(NewId()))*210) END
      WHEN 3 THEN CASE WHEN RAND(CHECKSUM(NewId()))<=0.5 THEN CEILING(RAND(CHECKSUM(NewId()))*29+61) ELSE CEILING(RAND(CHECKSUM(NewId()))*210) END
      WHEN 4 THEN CASE WHEN RAND(CHECKSUM(NewId()))<=0.5 THEN CEILING(RAND(CHECKSUM(NewId()))*29+91) ELSE CEILING(RAND(CHECKSUM(NewId()))*210) END
      ELSE NULL END
    FROM(SELECT * FROM bill
         UNION ALL
         SELECT * FROM #Temp2
         UNION ALL
         SELECT * FROM #Temp3
         UNION ALL
         SELECT * FROM #Temp4
         UNION ALL
         SELECT * FROM #Temp5) AS U
Не помню можно ли UNION в INSERT INTO SELECT. Если нельзя - раньше можно бросить объединение во временную таблицу

Дальше один UPDATE для поля price. Все это не проверял, возможны ошибки

Это будет существенно быстрее
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сжатие файлов для ускорения загрузки Derdemyansky Общие вопросы C/C++ 3 03.02.2014 18:25
Создание макроса для выполнения отчетности в несколько кликов! polysster Microsoft Office Excel 2 14.08.2013 23:16
дефыйна для ускорения ветора и вообще STL Kukurudza Общие вопросы C/C++ 1 29.03.2012 18:34
Изменение кода для ускорения движения фигуры. 7vlad37 Microsoft Office Excel 7 28.07.2011 14:52
Создание процедуры на SQL Skyline20000 SQL, базы данных 0 31.03.2009 16:57