2017-01-17 3 views
0

私はMicrosoft Accessを初めて使用しています。私の質問が些細な場合は、私の謝罪を受け入れてください。leftアクセス2013での結合クエリ

私は、毎月コースに登録されている学生の総数を示すクエリをAccessに書き込もうとしています。私はcourseconfirmed_enrollmentsという2つのテーブルを持っています。

courseテーブルにはcourse_nameという名前のフィールドが1つしかありませんが、confirmed_enrolmentsテーブルには3つのフィールドがあります。 student_code,course_name、およびmonth_of_enrol

私は私のクエリと特定の月の彼らの総入学にすべてcourse_name(学生はそれに在籍しているか否か)を示したいと思います。私が書いた質問は、登録したコースだけを表示し、登録をしていないコースは考慮しません。

あなたのお手伝いをしています。私はあなたがこれを意図すると考える

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

:ここに私のSQLコードです

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です。

問題は、条件がの2番目のテーブルにあることです。

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における第2の比較を許可していないようです:通常のSQL方言では、次のように書くでしょう。

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 ; 
:ところで

、クエリを記述するための別の方法は、相関副問合せを使用しています

関連する問題