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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2013, 13:36   #1
Revival001
Форумчанин
 
Регистрация: 30.09.2008
Сообщений: 483
По умолчанию access. запрос с двумя "ветками"

Здравствуйте!
В БД есть таблица студентов, две таблицы предметов (основные и факультативы) и две таблицы успеваемости соответственно. я написал запрос, который на основе успеваемости и коэффициентов значимости основных предметов(указаны в таблице предметов) строит некий рейтинг студентов. для каждого студента складывает произведения его оценки на значимость предмета, в результате получается число. полученный в запросе список студентов сортируется по значению этого числа.

фактически, реализована только верхняя ветвь схемы, которая изображена на картинке. Столбец выборки отвечающий за рейтинг:
Rating: (Sum([Progress1].[Mark]*[Subject].[Rate]))
Мне нужно, чтобы к основному рейтингу каждого студента прибавлялся его рейтинг по факультативам, если он есть. Но точно не знаю как это сделать. при попытке записать Rating как Rating: ((Sum([Progress1].[Mark]*[Subject].[Rate]))+(Sum([Progress2].[Mark]*[Facultative].[Rate]))), то есть сумма основного + факультативного рейтинга, в выборку попадают только те студенты, которые записаны хотя бы на один факультатив. а те, что проходят только основные предметы и не имеют ни одного факультатива, отсеиваются. Надеюсь на помощь

Это запрос только для рейтинга основных предметов:
Код:
SELECT Progress1.id_st, Student.Surname, Student.Name, Groups.Course, Groups.Faculty, Sum([Progress1].[Mark]*[Subject].[Rate]) AS Rating
FROM Subject INNER JOIN ((Groups INNER JOIN Student ON Groups.Number_gr = Student.Number_gr) INNER JOIN Progress1 ON Student.id_st = Progress1.id_st) ON Subject.id_sub = Progress1.id_sub
GROUP BY Progress1.id_st, Student.Surname, Student.Name, Groups.Course, Groups.Faculty
HAVING (((Groups.Course)=3) AND ((Groups.Faculty)="Бизнес-информатика"))
ORDER BY Sum([Progress1].[Mark]*[Subject].[Rate]) DESC;
а это мой неудавшийся запрос:
Код:
SELECT Progress1.id_st, Student.Surname, Student.Name, Groups.Course, Groups.Faculty, ((Sum([Progress1].[Mark]*[Subject].[Rate]))+(Sum([Progress2].[Mark]*[Facultative].[Rate]))) AS Rating
FROM Facultative INNER JOIN ((Subject INNER JOIN ((Groups INNER JOIN Student ON Groups.Number_gr = Student.Number_gr) INNER JOIN Progress1 ON Student.id_st = Progress1.id_st) ON Subject.id_sub = Progress1.id_sub) INNER JOIN Progress2 ON Student.id_st = Progress2.id_st) ON Facultative.id_f = Progress2.id_f
GROUP BY Progress1.id_st, Student.Surname, Student.Name, Groups.Course, Groups.Faculty
HAVING (((Groups.Course)=3) AND ((Groups.Faculty)="Бизнес-информатика"))
ORDER BY Sum([Progress1].[Mark]*[Subject].[Rate]) DESC;

Последний раз редактировалось Revival001; 23.05.2013 в 13:44.
Revival001 вне форума Ответить с цитированием
Старый 23.05.2013, 14:46   #2
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

видимо применяя left join
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 23.05.2013, 15:14   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

надо удалить таблицы Progress2 и Facultative, от них пользы нет, только мешают
eval вне форума Ответить с цитированием
Старый 25.05.2013, 20:59   #4
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Revival001.
Задачу "..к основному рейтингу . прибавлялся . рейтинг по факультативам.." Вашей конструкцией выполнить не удастся.
Рассмотрите на схеме связь между Progress1 и Progress2, (для наглядности прикройте таблицу Student)
отношение много-много не позволит решить задачу. Можно конечно изменить связи (например предположив, что
студент может посещать только факультативы связанные с его основными предметами). Но предложение eval
"..удалить таблицы Progress2 и Facultative.." мне кажется заслуживает внимания, ведь структура их одинакова.
Создайте в таблице Progress1 поле для маркировки статуса факультатив и смело удаляйте таблицу Progress2.
Ваша задача будет решаться без подобных вопросов.
Успехов Вам.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
запрос (выйти(завершить программу)) "Y";"N". SKS Паскаль, Turbo Pascal, PascalABC.NET 7 15.01.2009 16:32