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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2014, 15:26   #1
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию Процедура заполнения таблицы (SQL)

Имеется таблица в базе данных
Товар(НомерТовара, НазваниеТовара, Цена, НомерТипа, НомерФирмы)

Нужно создать процедуру заполнения данной таблицы по следующим условиям: Нужно создать 210 строк, НомерФирмы заполнены случайными равнораспределенными числами, НомерТипа заполняется след. образом: товар1-30 имеют тип 1, товар 31-60 имеют тип 2 и т.д. 30 товаров каждого типа, всего 7 типов. Для заполнения Цены используется след. правило: 50% товаров имеют цену от 0 до 200 р. и 50% от 200 до 3000 р.
Вопрос возникает как раз с заполнением цены, не могли бы вы мне объяснить как это делается? Как осуществляется заполнения таблицы с условием вероятности, что 50% товаров в случайном порядке имеют одну цену, а остальные 50% другую?

Вот код, который я уже написал: price1 -это цена от 0 до 200р, price2 - цена от 200 до 3000.

В последней строчке в VALUES написано 'price' временно, так как я не знаю пока, что нужно там написать.

Код:
CREATE PROCEDURE insert_article
AS
DECLARE @num INT,
		@num_firm INT,
		@num_t INT,
		@price1 INT,
		@price2 INT;
SET @num=1;
SET @num_firm=RAND(1)
SET @price1=RAND(1)
SET @price2=RAND(1)
WHILE @num<=210
	IF @num<=30
		SET @num_t=1
	IF @num>=31 AND @num<=60
		SET @num_t=2
	IF @num>=61 AND @num<=90
		SET @num_t=3
	IF @num>=91 AND @num<=120
		SET @num_t=4
	IF @num>=121 AND @num<=150
		SET @num_t=5
	IF @num>=151 AND @num<=180
		SET @num_t=6
	IF @num>=181 AND @num<=210
		SET @num_t=7
		BEGIN
		SET @num_firm=CEILING(RAND()*30)
		SET @price1=CEILING(RAND()*200)
		SET @price2=CEILING(RAND()*3000+200)
		PRINT @num_firm
			INSERT INTO article (num_article, name_article, price, num_type, num_firm)
				VALUES(@num, 'Товар '+LTRIM(STR(@num)),'price', @num_t, @num_firm)
Nekit9401 вне форума Ответить с цитированием
Старый 24.03.2014, 16:15   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
DECLARE @num int,
        @price int
SET @num=1
WHILE @num<=210 
BEGIN
  if (@num/2)*2=@num SET @price=CEILING(RAND()*200) ELSE SET @price=CEILING(RAND()*2799)+201
--  или такое условие if @num<=105 
  PRINT @price
  SET @num=@num+1
END
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.03.2014, 16:53   #3
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Аватар, Спасибо за помощь!
Только вот второе условие точно не подойдет, потому что получится, что первые 105 товаров, будут в пределах одной цены, а вторые 105 в пределах второй цены. А вот с первым условием я немного не понял. Мы делим номер товара на 2, а потом обратно умножаем его на 2 и сравниваем его с номером, в этом случае же он всегда будет равен номеру товара и тогда все товары получатся в пределах одной цены? Или я что-то не так понял? Должно получится примерно как на картинке.

Nekit9401 вне форума Ответить с цитированием
Старый 24.03.2014, 16:57   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

@num/2 делит нацело, как div. Дальше умножение и сравнение - проверка на четность/нечетность. Можно случайно выбирать, но тогда не будет строго 50%
Код:
  if RAND()<=0.5 SET @price=CEILING(RAND()*200) ELSE SET @price=CEILING(RAND()*2799)+201
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

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

Спасибо, теперь понял. Тогда получится, что цены будут чередоваться через один. А можно как-то сделать что бы не было какой-то определенной закономерности, что бы цены распределялись рандомно, но в итоге что бы получилось 50/50, как показано на картинке? Или все таки без какой-либо закономерности не обойтись?
Nekit9401 вне форума Ответить с цитированием
Старый 24.03.2014, 17:06   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Строго 50 на 50 только не случайные закономерности, как, например чет-нечет. Случайные в общем случае не дадут строго 50 на 50
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.03.2014, 17:10   #7
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Понял, спасибо за помощь!
Nekit9401 вне форума Ответить с цитированием
Старый 24.03.2014, 17:23   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно скомбинировать - почти все случайно, а концовку вынуждено
Код:
DECLARE @num int,
        @price int,
        @Count int
SET @num=1
SET @Count=0
WHILE @num<=210 
BEGIN
  IF (RAND()<=0.5 AND @Count<105) OR @num-@Count=105 BEGIN
    SET @Count=@Count+1
    SET @price=CEILING(RAND()*200)
  END
  ELSE SET @price=CEILING(RAND()*2799)+201
  PRINT @price
  SET @num=@num+1
END
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПРИНЦИП ЗАПОЛНЕНИЯ ТАБЛИЦЫ BENKS Помощь студентам 2 02.12.2012 21:36
Ошибка в процессе заполнения таблицы brans SQL, базы данных 1 26.11.2011 17:36
Заполнения таблицы WORDа mishan4uk Общие вопросы Delphi 1 25.07.2010 15:06
макрос для заполнения таблицы ruavia3 Microsoft Office Excel 4 09.09.2009 15:11
Процедура заполнения массива. Delphi Alex_2017 Помощь студентам 1 02.06.2008 17:55