Как правило, ваш SQL будет содержать случайную функцию некоторого типа (похоже, что для этого функция доступа имеет функцию rnd()
).
Таким образом, вы можете использовать:
select num, weight, rnd(num)
from tbl
order by weight desc, 3
Это позволит вам увидеть г для целей тестирования. В реальном запросе, вы можете просто хотите использовать что-то вроде:
select num, weight
from tbl
order by weight desc, rnd(num)
От this page:
Если значение больше 0, Rnd() возвращает следующее случайное число.
Когда значение меньше 0, Rnd() возвращает одно и то же случайное число, основанное на значении. Если значение происходит только один раз, вы не заметите этого поведения. Доступ также сбрасывает семя, что означает, что последовательность начинается снова и снова.
Если значение равно 0, RND() возвращает самое последнее сгенерированное случайное число
Update 1: я не уверен, является ли rnd()
выполняется один раз в следующих запросов или один раз в строке - документы не ясны. Комментарии, похоже, указывают, что одни и те же результаты принимаются для всех строк, что указывает на то, что они могут быть последними. Это может быть, что изменение его на rnd(num)
или rnd(abs(num)+1)
исправит эту проблему. Мне нужно будет проверить, когда я доберусь до коробки с установленным доступом.
Обновление 2: Теперь я проверил это в Access 2007, и он действительно дает одно и то же случайное значение для каждой строки, когда вы используете rnd (1). Это значение делает при каждом запросе запроса, а отдельные строки получают разные значения для rnd(num)
. Таким образом, запрос вам нужно:
select num, weight from tbl order by weight desc, rnd(num);
Если вы создаете таблицу с двумя полями Number
, а затем запустить этот запрос через него, вы увидите, что постоянное освежать (с F5
) обменяет вокруг 2
, 7
и 4
строк в случайном порядке, но оставить 1
и 6
строк в том же месте, так как весы первых трех - все 13
, а весы последних двух - 12
и 9
соответственно.
Я обновил запросы выше, чтобы соответствовать этой новой информации.
Семя 1 будет генерировать тот же случайный номер факса для каждой записи. Вы могли бы Вместо этого используйте num * weight. – marg
@marg, семя не установлено для положительных чисел, только отрицательные (см. цитату со связанной страницы). rnd (1) будет генерировать другое число каждый раз. Использование num * weight даст вы одинаковый порядок каждый раз, а не то, что хотел OP. – paxdiablo
Марг прав о num * weight. Я получал одинаковое случайное число с rnd (1) – silverkid