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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2010, 20:25   #1
Макс_q
 
Регистрация: 19.06.2010
Сообщений: 6
По умолчанию Случайна сортировка

Здравствуйте! У меня есть таблица, в одном столбце по порядку идут значения, мне нужно перемешать их случайным образом. Как это можно сделать? Помогите пожалуйста.
Макс_q вне форума Ответить с цитированием
Старый 19.06.2010, 21:21   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Макс_q.
".. в одном столбце.." - для таблиц БД более приемлемо название Поле.
"..перемешать их случайным образом.." Вам поможет следующая SQL конструкция:
Код:
SELECT * FROM Table1 ORDER BY Rnd([Поле по порядку])
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 19.06.2010, 21:43   #3
Макс_q
 
Регистрация: 19.06.2010
Сообщений: 6
По умолчанию

"SELECT * FROM Table1 ORDER BY Rnd([Поле по порядку])"

Таким образом строки сортируются, но поля остаются связанными(1-1, 2-2, 3-3), а мне нужно, чтоб одно поле оставалось как было, а второе сортировалось(Например: 1-5, 2-8, 3-1). Такое возможно?
Макс_q вне форума Ответить с цитированием
Старый 19.06.2010, 22:13   #4
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Ваша задача - ".. есть таблица, в одном столбце по порядку идут значения, мне нужно перемешать их случайным образом..." получила развитие.
"..но поля остаются связанными(1-1, 2-2, 3-3).." - именно так т.к. все эти поля принадлежат одной записи, и Ваш пример "..Например: 1-5, 2-8, 3-1.." (если я верно понял задачу) может быть реализован либо с помощью составной SQL конструкции, либо наполнением массива. Но для этого потребуется дополнительное уточнение задачи.

Евгений.

P.S. "строки" в таблице БД чаще называют - записи
Teslenko_EA вне форума Ответить с цитированием
Старый 19.06.2010, 22:22   #5
Макс_q
 
Регистрация: 19.06.2010
Сообщений: 6
По умолчанию

Уточнение задачи:
Создать таблицу в виде билетов для контрольных работ. Первое поле - номер вопроса, второе поле - номер билета. Нужно создать запрос, который будет сортировать номер билета случайным образом, то есть, если раньше 1ый вопрос был в 1ом билете, то после выполнения запроса, 1ый вопрос будет в каком-нибудь другом билете. Сортировать нужно именно поле с билетами.
Макс_q вне форума Ответить с цитированием
Старый 19.06.2010, 22:46   #6
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Задача должна быть сформулирована примерно так: Убрать заданную нумерацию, отсортировать случайным образом пронумеровать отсортированную таблицу.
Я верно понял?
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 19.06.2010, 23:03   #7
Макс_q
 
Регистрация: 19.06.2010
Сообщений: 6
По умолчанию

Дело в том, что номера вопросов - ключевое поле, не думаю, что можно будет его убрать и заново задать такую нумерацию, ведь таблицы связаны по этому полю, хотя если это возможно, то прошу показать как.
Макс_q вне форума Ответить с цитированием
Старый 20.06.2010, 08:49   #8
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Совершенно не обязательно "убирать" ключевое поле в источнике, проще создат временную таблицу и использовать её для нумерации.
Это может быть выполнено следующими SQL конструкциями
1. удалить таблицу TMP
Код:
DROP TABLE TMP
2. создать таблицу TMP из таблицы Table1 с добавлением RND поля F
Код:
SELECT INT(Rnd([Id]) *1000) AS F, * INTO TMP
FROM Table1
ORDER BY Rnd([Id])
3. отображение таблицы с нумерацией (вместо ".. AS [Номер], * .." задайте необходимые поля)
Код:
SELECT (Select Count(*) 
        FROM (SELECT F FROM TMP ORDER BY F) T1 
        WHERE T1.F<=T2.F) AS [Номер],  *
     FROM 
             (SELECT *  FROM TMP) T2
     ORDER BY T2.F
(Id -поле с номером вопроса)
возможно это не самый удачный способ, но не самый сложный это точно.
Евгений.

Последний раз редактировалось Teslenko_EA; 20.06.2010 в 08:52.
Teslenko_EA вне форума Ответить с цитированием
Старый 20.06.2010, 15:08   #9
Макс_q
 
Регистрация: 19.06.2010
Сообщений: 6
По умолчанию

Следуя вашей инструкции, ставлю в запрос такой код:
SELECT INT(Rnd([Id_pyt]) *1000) AS F, * INTO TMP
FROM Bileti
ORDER BY Rnd([Id_pyt])
SELECT (Select Count(*)
FROM (SELECT F FROM TMP ORDER BY F) T1
WHERE T1.F<=T2.F) AS Id_pyt, Nom_bilet
FROM
(SELECT * FROM TMP) T2
ORDER BY T2.F;
но выдаёт ошибку синтаксиса
Макс_q вне форума Ответить с цитированием
Старый 20.06.2010, 15:25   #10
Макс_q
 
Регистрация: 19.06.2010
Сообщений: 6
По умолчанию

Следуя вашей инструкции, ставлю в запрос такой код:
SELECT INT(Rnd([Id_pyt]) *1000) AS F, * INTO TMP
FROM Bileti
ORDER BY Rnd([Id_pyt])
SELECT (Select Count(*)
FROM (SELECT F FROM TMP ORDER BY F) T1
WHERE T1.F<=T2.F) AS Id_pyt, Nom_bilet
FROM
(SELECT * FROM TMP) T2
ORDER BY T2.F;
но выдаёт ошибку синтаксиса
Макс_q вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
Сортировка методом линейного выбора и "быстрая" сортировка Карол Помощь студентам 4 27.09.2009 19:52
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32
Случайна выборка из массива spectralw Помощь студентам 0 01.05.2009 21:03