2017-01-17 3 views
0

Я новичок в Microsoft Access. Примите мои извинения, если мой вопрос кажется тривиальным.left Присоединиться к запросу 2013

Я пытаюсь написать запрос в Access, который показывает общее количество учащихся, обучающихся на курсах, ежемесячно. У меня есть две таблицы: course и confirmed_enrollments.

Таблица course имеет только одно поле с именем course_name, тогда как таблица confirmed_enrolments имеет три поля; student_code, course_name, и month_of_enrol.

Я хочу, чтобы показать всеcourse_name(поступил ли студенты в нем или нет) в моем запросе и их общего числа учащихся конкретного месяца. В запросе, который я написал, показаны только курсы, которые регистрируются и не учитывают курсы, которые не имеют регистрации.

Ищет вашу помощь. Вот мой SQL-код:

SELECT Course.Course_name, 
     Count(confirmed_enrolments.Student_code) AS CountOfStudent_code, 
     confirmed_enrolments.Month_of_enrol 
    FROM Course 
     LEFT JOIN confirmed_enrolments 
      ON Course.Course_name = confirmed_enrolments.Course_name 
    GROUP BY Course.Course_name, confirmed_enrolments.Month_of_enrol 
    HAVING confirmed_enrolments.Month_of_enrol="December 2016"; 

ответ

1

Я думаю, что вы собираетесь это:

SELECT c.Course_name, Count(ce.Student_code) AS CountOfStudent_code, 
     ce.Month_of_enrol 
FROM Course as c LEFT JOIN 
    (SELECT ce.* 
     FROM confirmed_enrolments as ce 
     WHERE ce.Month_of_enrol = "December 2016" 
    ) as ce 
    ON c.Course_name = ce.Course_name 
GROUP BY c.Course_name, ce.Month_of_enrol; 

Использование пункта HAVING в запросе умно, но вы фильтрация по второй таблице - и значение равно NULL, а не указанному месяцу - при отсутствии совпадений.

Проблема в том, что состояние находится на секунде стол. В обычном SQL диалекте, можно было бы написать:

SELECT c.Course_name, Count(ce.Student_code) AS CountOfStudent_code, 
     ce.Month_of_enrol 
FROM Course as c LEFT JOIN 
    confirmed_enrolments as ce 
    ON c.Course_name = ce.Course_name AND 
     ce.Month_of_enrol = "December 2016" 
GROUP BY c.Course_name, ce.Month_of_enrol; 

Но MS Access, кажется, не допускает второе сравнение в LEFT JOIN.

Кстати, еще один способ написать запрос использует связанный подзапрос:

SELECT c.Course_name, 
     (SELECDT Count(ce.*) 
     FROM confirmed_enrolments as ce 
     WHERE ce.Month_of_enrol = "December 2016" 
     ) AS CountOfStudent_code, 
     "December 2016" as ce.Month_of_enrol 
FROM Course as c ; 
Смежные вопросы