Я хотел бы сгенерировать случайное число от 0,85 до 0,95 для каждой строки.
Сначала я пытался использовать (rand()*(0,85-0,95)+0,95), но для каждой строки генерировалось одно и то же число.
Мой запрос выглядит примерно так:
select
case when x=1 then (rand()*(0.85-0.95)+0.95) else 0
from abcd
Возможно, используйте NEWID для генерации случайных чисел; поскольку RAND() будет давать одинаковые значения для всех строк в таблице, поскольку начальное значение не меняется. Мы можем использовать NEWID, чтобы передать новые начальные значения для каждой строки и получить случайное число diff.
поэтому состояние вашего дела больше похоже на
(RAND(CHECKSUM(NEWID()))*(0.85-0.95)+0.95)
и ваш запрос, как
select
case when x=1 then (RAND(CHECKSUM(NEWID()))*(0.85-0.95)+0.95) else 0
from abcd
RAND()
возвращает тот же номер для данного утверждения. Решением будет использование NEWID()
. Что-то вроде:
CONVERT( DECIMAL(2, 2), .85 + (.95 - .85 )*RAND(CHECKSUM(NEWID())))
Скрипка здесь
Педантичность — приправа жизни. Я обновил его до заявления.
Отвечает ли это на ваш вопрос? Как сгенерировать случайное число для каждой строки в выборке T-SQL?