|
15 Кб. |
|
| Прошу помочь! В запросе при сложении 1 целого числа и числа с 2 знаками после запятой выдаётся куча знаков после запятой.. Что не так непонятно
И ещё если не сложно подскажите на примере как правильно написать такой запрос:
1-имеем запрос как в примере, с любым количеством исходных значений
2- нужно взять 2 самых маленьких значения выражений и сложить их | |
|
| |
|
44 Кб. |
|
| FieldProperties -> Format -> Fixed ===>>> | |
|
| |
|
|
|
| Спасибо большое, я ставил свойства в таблице и думал, что в запрос они перейдут тоже
Если можно, подскажите пожалуйста по второму вопросу тоже | |
|
| |
|
|
|
| можно прибегнуть к агрегатным функциям DMin, но такие советы следует давать осторожно.
поясни задачу - т.е. необходимо:
выбрать самое маленькое во всей таблице значение из поля 1,
прибавить самое маленькое во всей таблице значение из поля 2
... из поля n
так? | |
|
| |
|
|
|
| Ну не совсем. Попробую расписать задачу подробно.
В таблице в полях 1,2,3 содержатся значения времени выполнения упражнения (1,2,3 номера попыток), это всегда секунды с точностью до сотых. В поля 4,5,6 заносятся штрафные очки набранные в процессе выполнения, (всегда целое число) в запросе они плюсуются к конкретной попытке. Результат упражнения это сумма двух лучших попыток (с самым маленьким временем). Задача сложить между собой время выполнения упражнения и штрафные очки, затем изо всех полученных результатов выбрать 2 самых маленьких и сложить их между собой. Попыток может быть не 3 а намного больше... | |
|
| |
|
|
|
| Чтобы совсем упростить:
1-Есть запрос содержащий 3 или 5 или 7 или сколько угодно выражений на сложение полей таблицы.
2 -Нужно сравнить между собой результаты выражений в запросе и выбрать 2 самых маленьких значения.
3 -Выбранные 2 значения нужно сложить между собой. | |
|
| |
|
|
|
| >>> или сколько угодно выражений на сложение полей таблицы.
да-да-да | |
|
| |
|
|
|
|
Попыток может быть не 3 а намного больше...
|
тогда меняй схему БД | |
|
| |
|
|
|
| Хорошо остановимся на фиксированном количестве выражений в запросе. То есть условия всё те же, но полей в таблице всего 8 и соответственно в запросы мы имеем 4 выражения:
1) поле1+поле5
2) поле2+поле6
3) поле3+поле7
4) поле4+поле8
5) ??? тут должно быть выдающее конечный результат запроса.
Ну не выходит у меня | |
|
| |
|
|
|
| >> 5) ??? тут должно быть выдающее конечный результат запроса.
я бы вел сравнение во внешней функции вроде такой
Function fCalculate(a, b, c, d, e, f)
Dim x, y, z
x = a + d
y = b + e
z = c + f
If y < x Or z < x Then
If z < y Then
fCalculate = z
Else
fCalculate = y
End If
Else
fCalculate = x
End If
End Function
|
и возвращал результат в запрос...
SELECT fCalculate([знач 1],[знач 2],[знач 3],[знач 4],[знач 5],[знач 6]) AS Результат
FROM Таблица1
|
но можно и в самом запросе посчитать - просто очень неудобное и длинное выражение получится...
_______________________
вообще-то я бы переделал схему данных | |
|
| |
|
|
|
| Поскольку программку только начал писать изменить схему легко, но мне кажется что может быть проще: 1-я таблица содержит данные о людях( Ф.И.О. и т.п. ); 2-я содержит данные о результатах (дата выполнения, № упражнения, 4 поля для основного времени и 4 поля для штрафного времени ) больше и нет ничего, да и по большому счёту не нужно. Был бы весьма признателен если бы Вы подсказали как правильно сделать. Условия что нужно получить в итоге я писал. | |
|
| |
|
|
|
| >>> Был бы весьма признателен если бы Вы подсказали как правильно сделать
поскольку "зачетный" вариант выбирается один из трех-четырех, какой смысл хранить остальные?
при тестировании необходимо запоминать некоторое количество промежуточных результатов во временную таблицу (например)
выбирать из них один показательный, или рассчитывать его (это может быть не только лучший или худший, а средний, например)
и уже окончательный вариант оценки хранить в рабочей таблице
нет никакого разумного объяснения 8 полям - для четырех вариантов для основного и штрафного времени...
можно вообще промежуточные варианты не хранить, а сразу по ходу тестирования выбирать подходящий
(в зависимости от методики определения результата)
-------------------
вообще схема будет зависеть и от методики тестирования например по способу ответов:
сформулировать самостоятельно правильный ответ
или
выбрать правильный<е> вариант<ы> ответа | |
|
| |
|
|
|
| К сожаления так не получится.
Программка пишется для упрощения подсчёта результатов на соревнованиях и все исходные данные должны обязательно сохраняться. чтобы не могло возникнуть вопросов о ошибках в судейских подсчётах, через пару месяцев,а то и год после соревнования.
В принципе сложного тут ничего нет единственное действие которое действительно вызывает проблему это сравнение 4 цифр и выбор из них 2-х наименьших. Всё остальное пишется хоть и громоздко но несложно. | |
|
| |
|
|
|
| хорошо, можно и сохранять - все равно это должна быть простая таблица
Спортсмен
Соревнование
Попытка№
Результат | |
|
| |
|
|
|
| кактотак
тУченики
---------------------------
* КодУченика
ФИОУченика
ДРУченика
ПолУченика
тЭкзамены
---------------------------
*КодЭкзамена
*КодУченика
*КодВопроса
Результат
тВопросы
--------------------------
*КодВопроса
Вопрос
Ответ | |
|
| |
|
|
|
| В массив это надо. (2,N). /Запросом не обязательно. Можно через рекордсет. Потом задача для 5 класса. | |
|
| |
|
|
|
| если нужно хранить результаты попыток то массив и не нужен :)
просто хранить все показанные результаты и выбирать нужные
SELECT TOP 2 [Результат]
FROM тРезультаты
ORDER BY [Результат]
(WHERE [Спортсмен] = "Иванов" AND [Соревнование] = "прыжки") | |
|
| |
|
|
|
| Jet-ом скучно решать такие задачи.
Толи дело VBA - процессор кипит, кулеры "на взлет", романтика!
:) | |
|
| |
|
152 Кб. |
|
| посмотрите если можно исходник | |
|
| |
|
|
|
| тут запросов никаких нет только таблицы и проекты форм.
У меня очень низкая квалификация и многие вещи понятны только на примерах к сожалению... | |
|
| |
|
|
|
| дома посмотрю :)
---------------
подсчет для четырех варианов (выбор лучшего результата - наименьшего значения Время+Штраф
подойдет функция вида
Function fCalculate(a, b, c, d)
If b < a Or c < a Or d < a Then
If c < b Or d < b Then
If d < c Then
fCalculate = d
Else
fCalculate = c
End If
Else
fCalculate = b
End If
Else
fCalculate = a
End If
End Function
|
и запрос вида
SELECT [фамилия] & " " & Left([имя],1) & ". " & Left([отчество],1) & "." AS Gunner, fCalculate([1 этап время]+[1 этап штраф],[2 этап время]+[2 этап штраф],[3 этап время]+[3 этап штраф],[4 этап время]+[4 этап штраф]) AS BestResult
FROM Стрелки INNER JOIN Результат ON Стрелки.[ID стрелка] = Результат.[ID стрелка];
|
| |
|
| |
|
|
|
| Не будет с мое стороны наглостью попросить это на примере?
Сделал модуль и запрос, но считает только самый лучший результат, а тот что на втором месте по значению, игнорирует. Вписывает в это поле копию лучшего значения. | |
|
| |
|
|
|
|
| все равно нужно делать "вертикальную" таблицу
и результат выбирать через SELECT TOP n - тогда и два лучших можно и три лучших и средний и ч*рта в ступе :))) | |
|
| |
|
|
|
| Блин спасибо конечно, но у меня не та квалификация чтобы это адаптировать
Если можно, то я пару постов выше прикреплял исходник, вот бы туда это запихнуть. Просто время уже пол десятого, а завтра по этой программке уже 250 человек считать придётся... | |
|
| |
|
185 Кб. |
|
| :)
по первоначальному ТЗ нужен был только самый лучший результат
файл в приложении ===>>>
все остальное можно приточить напильником
------------
посмотрел - да, нужно было два самых маленьких :)))
ладно, что-то придумаем | |
|
| |
|
|
|
| Сейчас нашел ещё 1 засаду.
Если человек полностью сливает упражнение то и время у него не фиксируется соответственно для программы оно 0 и она его считает как лучшее В принципе конечно это можно обойти поставив значением по умолчанию в каждое поле какую нибудь безумную цифру, но как то некрасиво получится... | |
|
| |
|
|
|
| Аууу... Все спят уже | |
|
| |
|
|
|
| ты ищи пока и другие засады - там есть еще... | |
|
| |
|
|
|
| В каждом поле (Конструктор таблиц) есть параметр "Значение по умолчанию" - вот там ничего не ставь - будет NULL. | |
|
| |
|
|
|
| Спасибо помогло, теперь пустое поле игнорирует. Если бы оно ещё и считало как нужно... | |
|
| |
|
|
|
| >>> вот там ничего не ставь - будет NULL.
это зависит от правил подсчета результатов. | |
|
| |
|
|
|
|
это зависит от правил подсчета результатов.
|
нет все зависит от того мы продаем или покупаем
2 аффтар
в чем проблема подсчета 4-х несчастных цифирей | |
|
| |
|
|
|
| посмотрел на струкктуру - а если добавят 5-й и 6-й этапы - че все на фиг переделывать
да и соревнования могут перенести на другой день
может проще код, дата, спортсмен, кол-во мишеней, упражнение, Этап (вернее его Код из таблы Упражнение-Этапы), время, штраф.
и не надо морочить яйцы с нулем - нет записи - нет этапа
ни фига не надо сравнивать просто запрос по возрастанию по полю время+штраф*К | |
|
| |
|
|
|
| Всё сделал как Вы написали, переделал структуру таблиц, но вот запрос что то не выходит. Можно пример запроса? | |
|
| |
|
|
|
| приложите пример вашей БД
да, и не используйте пробелы в именованиях объектов - дико бесит и отнимает кучу времени на соблюдение правил синтаксиса при написании запросов | |
|
| |
|
160 Кб. |
|
| вот пример | |
|
| |
|
|
|
| эта схема уже гораздо лучше - так держать
только с именованиями объектов надо разобраться.
за имена типа "кол-во мишеней" нужно ставить двойку | |
|
| |
|
|
|
| исправлюсь | |
|
| |
|
|
|
| Проблема в том что нужно взять 4 цифры результатов этапов соответствующие номеру, выбрать из них 2 самые маленькие, сложить и выдать на выходе их сумму. Ключевая проблема выбрать 2 самых маленьких результата. | |
|
| |
|
|
|
| если все 4 одинаковые какие выбирать? | |
|
| |
|
|
|
| если все одинаковые то без разницы - любые 2 | |
|
| |
|
53 Кб. |
|
|
SELECT TOP 2 Сводная.[ID стрелка], Сводная.этап, [время]+[штраф] AS Выражение1
FROM Сводная
ORDER BY [время]+[штраф];
|
выдает 2 самых маленьких записи, если добавить Where Id_Стрелка= получим для стрелка.
посмотри пример Стрелки | |
|
| |