2015-03-29 5 views
0

У меня есть база данных, которая отслеживает часы работы сообщества в сообществе, если они участвуют в мероприятии. Отношения устанавливаются правильно, но когда я сталкиваюсь с проблемой, это сводный запрос.MS Access - проблемы с совокупным запросом

Это логика, что я пытаюсь сделать:

if(ActivityAttendance.Attended) == 1 
    Affiliates.completedHours += Activities.creditHours 

(This is just supposed to be more of a pseudo code) 

ACTIVITYATTENDANCE это имя таблицы, которая не принадлежит «нет да /» поле ПОСЕЩАЛ. CompletedHours - поле внутри таблицы AFFILIATES.

Я пробовал найти решение, но кажется, что все, что я могу найти в Интернете, - это возможность суммировать количество да и количество нулей. Я прикрепил картину отношений для лучшего понимания.

Это что-то, что может быть выполнено с использованием базовых функций доступа или есть SQL-решение?

Так как я новичок в стек я не мог отправить изображение непосредственно, но я загрузил его здесь:

http://s22.postimg.org/g0r53vgtd/Capture.png

ответ

1

Используйте IIF() с суммой в строке SELECT, совокупного запрос:

SELECT Affiliates.StudentID, Affiliates.[First Name], Affiliates.[Last Name], 
Sum(IIF(ActivityAttendance.Attended = True, Affiliates.[Completed Hours], 0)) As AttendedServiceHours 
FROM Affiliates 
INNER JOIN ActivityAttendance ON Affiliates.StudentID = ActivityAttendance.StudentID 
GROUP BY Affiliates.StudentID, Affiliates.[First Name], Affiliates.[Last Name] 

в качестве альтернативы, вы можете использовать ИНЕКЕ в вашем запросе агрегатного:

SELECT Affiliates.StudentID, Affiliates.[First Name], Affiliates.[Last Name], 
Sum(Affiliates.[Completed Hours]) As AttendedServiceHours 
FROM Affiliates 
INNER JOIN ActivityAttendance ON Affiliates.StudentID = ActivityAttendance.StudentID 
WHERE ActivityAttendance.Attended = True 
GROUP BY Affiliates.StudentID, Affiliates.[First Name], Affiliates.[Last Name] 
+0

Спасибо вы за это! Это помогло, но это только дошло до меня на полпути. Я все еще пытаюсь понять, как я могу взять эти «AttendedServiceHours» и суммировать их, а затем установить эту сумму в «Завершенные часы». Я понимаю, что вы можете использовать «итоговую» функцию в представлении таблицы данных, но это не позволяет мне принять эту сумму и присвоить ее значение другому полю. –

+0

Я не понимаю. Вышеупомянутые запросы выполняют Total Completed Hours каждым отдельным студентом, и это поле называется AttendedServiceHours. Вам нужны большие часы для всех учеников? И вам нужно, чтобы обновленные часы были обновлены, для чего потребуется другой запрос на обновление? – Parfait

+0

Прошу прояснить, Что я пытаюсь сделать, если студент посещает одно событие, которое стоит 4 часа кредита, поле «Филиалы. [Завершенные часы]» обновляется до 4. А затем, если студент посещает другое мероприятие, стоимость которого составляет 5 кредитных часов, поле «Филиалы. [Завершенные часы]» обновлено до 9. «AttendedServiceHours» на самом деле не рассчитано на часы, это просто событие Event by Event и сумма кредита Часы для каждого события. Проблема в том, что студент может посещать более одного события. Итак, как я могу суммировать все события, которые посещал студент? –

Смежные вопросы