1

我正在尝试创建一个查询,列出表 1 中的记录以及基于表 2 中的一个或多个字段中具有空值的相应记录的状态。我遇到的问题是如何包含表 1 中在表 2 中没有相应记录的记录。

在我的示例中,我想在 tblStudent 中列出所有学生的姓名以及在tblStudentSchedule中指示他们的日程安排状态的字段。如果tblStudentSchedule 中的课程教师字段为 Null 或在 tblStudentSchedule 中找不到相应记录,那么想显示"Incomplete"。否则,我想显示"Complete"

期望的结果

Name  | Schedule Status
-----------------------
Bob   | Incomplete     
Sally | Incomplete
Jane  | Incomplete
Matt  | Incomplete
Jim   | Complete

我在Access工作。我会发布我的查询尝试,但我认为他们只会混淆这个问题。这可能是非常基本的,但我有一个精神障碍,试图将我的大脑包裹在这个问题上。

tbl学生

studentID | studentName
-----------------------
1         | Bob
2         | Sally
3         | Jane
4         | Matt
5         | Jim

tblStudentSchedule

studentID | period | course | teacher
-------------------------------------
1         | 1      | math   | Jones
1         | 2      | <null> | Watson
2         | 1      | reading| <null>
4         | 1      | <null> | Crick
5         | 1      | math   | Jones
4

2 回答 2

2
select  s.studentName as Name
,       iif(sum(iif(ss.course is null or ss.teacher is null, 1, 0)) = 0,
            'Complete', 'Incomplete')
        as [Schedule Status]
from    tblStudent s
left join    
        tblStudentSchedule ss
on      ss.studentID = s.studentID
group by
        s.studentName 

A在未找到匹配项时left join返回单行。null因此,ss.course is null当学生不在日程表中时,也会触发检查。

于 2012-12-06T14:56:21.970 回答
0

如果在 tblStudentSchedule 中没有找到对应的记录,您可以使用左连接或右连接从该表中获取作为空列的行。参见下文:

http://office.microsoft.com/en-us/access-help/left-join-right-join-operations-HP001032251.aspx

然后转换空列使用 isnull 函数 http://www.techonthenet.com/access/functions/advanced/isnull.php

或者使用 case 语句来检查 null http://www.techonthenet.com/access/functions/advanced/case.php

于 2012-12-06T14:57:39.860 回答