【发布时间】:2013-10-15 11:08:33
【问题描述】:
我正在做一些工作经验,我在 Microsoft Access 2007 中创建了过去学生的数据库。
我在创建查询以过滤已完成入门课程但没有其他内容的学生时遇到问题。我想我需要 2 个过滤器。
我有两个表:Customers 和 Courses,具有一对多关系:每个客户/学生都可以参加一门或多门课程。
所以有些学生修了一门或多门课程。我有 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 名学生。但他们中超过一半的人也上过其他课程(如果你手动计算的话)。
我需要过滤只完成了介绍课程但没有其他任何课程的学生(学生列表 - 他们的详细信息,没有参加任何其他课程,只是介绍);
我想创建一个查询来找出谁完成了介绍课程,但没有别的;
第二个查询是找出谁上过“入门课程和中级课程,但没有别的”。
课程表
课程编号 课程名 课程日期 客户 ID 备注
“课程表”中有其他课程的列表 先进的 喷枪 新娘 头发 中间的 介绍 提神剂
客户表
客户 ID 名 姓 电子邮件 电话 地址1 地址2 地址3 出生日期 额外信息
这是我的问题。我还是不知道怎么办,其他课程的学生不应该是结果的一部分???
这是我想出的代码,用于找出谁比介绍课程做得更多:
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));
现在我需要弄清楚如何隐藏它们,而是显示谁只做了介绍课程而没有其他 (?)。
【问题讨论】:
标签: sql ms-access join filter ms-access-2007