2013-02-20 2 views
0

Шага 1Наполнение поля даты вылета, которая после даты прибытия

Дата прибытия (уже сформировавшаяся) - 1,35 миллиона раза

Шаг 2

рандомизация числа от 0 до 1

Этап 3

Используйте случайное число, указанное выше, чтобы создать сценарий ниже

UPDATE BOOKINGS 
SET DepartureDate 
CASE WHEN RAND() Result = Between 0 and 0.3 = Departure Date will be 2 Nights Later 
CASE WHEN RAND() Result = Between 0.3 and 0.4 = Departure Date will be 3 Nights Later 
CASE WHEN RAND()Result >0.4 = Departure Date will be either 1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28 Nights Later 

ответ

0

Не используйте RAND() с заменяющим семенами. Это приводит к ужасно рандомизированным данным.

Чтобы получить решение, вам необходимо создать «ведра» возможных значений. 3 дня предполагается в 10% случаев; что делает наименьшее ведро, поэтому нам нужно десять ведер. 2 дня идет в 3 ведра. Остальные значения идут по 2 ведрам. затем просто использовать по модулю, чтобы выбрать один из 10 ковшей, как это:

CREATE TABLE dbo.booking(Id INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,days INT); 

GO 

INSERT INTO dbo.booking(days) 
SELECT TOP(100000) 0 FROM sys.columns A,sys.columns B,sys.columns C,sys.columns D; 

GO 


UPDATE b 
SET days = rndm.days 
FROM dbo.booking b 
CROSS APPLY (
    SELECT days 
    FROM (VALUES(0,2),(1,2),(2,2),(3,3),(4,1),(5,1),(6,4),(7,4),(8,28),(9,28))dn(n,days) 
    WHERE n = ABS(CHECKSUM(NEWID(),b.Id))%10 
)rndm; 

GO 

SELECT days,COUNT(1) cnt 
FROM dbo.booking 
GROUP BY days; 


GO 

EDIT: Обновленный код не использовать случай заявление.

+0

Привет Себастьян У меня есть 1,35 млн даты заезда и каждый из этих потребностей, чтобы иметь дата вылета, когда я выполняю ваш запрос выше, у меня есть нули в дате вылета, а также отсутствие пребывания, например, у меня нет 4 ночей или 9 ночей. Я что-то упустил? Спасибо – wafw1971

+0

Я обновил код, чтобы не использовать аргумент case, поскольку это все испортило. Что касается 9 ночей, это не является частью вашего требования, перечисленного выше, поэтому он не появляется. –

+0

Привет, Себастьян Я переписал свое требование (см. Выше), потому что я не думаю, что правильно объяснил (я действительно новичок в SQL). Спасибо – wafw1971

0

Просто, чтобы вы знаете, что окончательное решение я использовал:

UPDATE BOOKINGS 
SET DepartureDate = 
DATEADD(day, 
CASE WHEN Rand(CHECKSUM(NEWID())) BETWEEN 0 and 0.3 THEN 2 ELSE 
CASE WHEN Rand(CHECKSUM(NEWID())) BETWEEN 0.3 and 0.5 THEN 3 ELSE 
Round(Rand(CHECKSUM(NEWID())) * 28,0) END END,ArrivalDate) 

Благодаря

Wayne

Смежные вопросы