我正在做工作经验,我在 Microsoft Access 2007 中创建了过去学生的数据库。
我在创建查询以过滤已完成入门课程但没有其他内容的学生时遇到问题。我想我需要 2 个过滤器。
我有两个表:客户和具有一对多关系的课程:每个客户/学生都可以参加一门或多门课程。
所以有些学生做了一门或多门课程。我有 111 名学生参加了介绍课程。但他们中的一些人也参加了中级课程,或者同时参加了中级课程和高级课程。
我需要过滤已完成入门课程但仅此而已的学生;
谁已经完成了入门课程和中级课程,但没有别的;
我正在努力将那些学生分开
目前我的 SQL 语句如下所示:
SELECT Customers.FirstName, Customers.Surname, Customers.Email, Courses.CourseName, Courses.CourseDate, Customers.CustID
FROM Customers INNER JOIN Courses ON Customers.CustID = Courses.CustID
WHERE (((Courses.CourseName) Like "Intro?*"))
ORDER BY Customers.FirstName;
目前的结果是 111 名学生。但他们中超过一半的人也上过其他课程(如果你手动计算的话)。
我需要过滤只完成了介绍课程但没有其他内容的学生(学生列表 - 他们的详细信息,没有参加任何其他课程,只是介绍);
我想创建一个查询来找出谁完成了介绍课程,但没有别的;
第二个查询是找出谁完成了“入门课程和中级课程,但没有别的”。
课程表
CourseID CourseName CourseDate CustID Notes
“课程表”中还有其他课程的列表 高级喷枪新娘头发中级介绍 提神
客户表
CustID FirstName Surname Email Phone Address1 Address2 Address3 DateOfBirth 额外信息
那是我的问题。我还是想不通怎么办,其他课程的学生不应该是结果的一部分???
这是我想出的代码来找出谁比介绍课程做得更多:
SELECT Customers.FirstName, Customers.Surname, Customers.Email, Count(Courses.CourseName) AS CountOfCourseName, Courses.CustID
FROM Customers INNER JOIN Courses ON Customers.CustID = Courses.CustID
GROUP BY Customers.FirstName, Customers.Surname, Customers.Email, Courses.CustID
HAVING (((Count(Courses.CourseName))>1));
现在我需要弄清楚如何隐藏它们,而是显示谁只做了介绍课程而没有其他(?)。