tblStudents: StudentID, ForeName, LastName, ...;
tblCourses: CourseID, CourseStartYear/CourseStartDate, CourseName, CourseVersion (Version values: 1 - audio, 2 - written, with same name and CourseStartYear/CourseStartDate can be 2 different versions);
tblStudentCourses: SCID, StudentID, CourseID, CompletedDate.
The query will be something like (I'm written this on fly and I am not very comfortable with Access query syntax and weird usage of brackets in it, as lately I use SQL Server Databases as backend exclusively)
Code:
SELECT
std.StudentID, std.ForeName, std.LastName, crs1.CourseName, crs1.CourseStartYear, stc1.CompletedDate AS [AudioCompleted], stc2.CompletedDate AS [WrittenCompleted]
FROM tblStudents std
LEFT JOIN (((tblStudentCourses stc1) ON stc1.StudentID = std.StudentID LEFT JOIN tblCOurses crs1 ON crs1.CourseID = stc1.CourseID)
LEFT JOIN tblStudentCourses stc2 ON stc2.StudentID = std.StudentID LEFT JOIN tblCOurses crs2 ON crs2.CourseID = stc2.CourseID AND crs2.CourseStartYear = crs1.CourseStartyear AND crs2.CourseName = crs1.CourseName)
WHERE
crs1.COurseVersion = 1 AND crs2.COurseVersion = 2