具有空值的记录的SQL显示状态

具有空值的记录的SQL显示状态,sql,ms-access,null,Sql,Ms Access,Null,我试图创建一个查询,列出表1中的记录以及基于表2中一个或多个字段中具有空值的相应记录的状态。我遇到的问题是如何包含表1中没有相应记录的记录 在我的示例中,我想列出tblStudent中所有学生的姓名以及一个字段,该字段指示他们在tblStudentSchedule中的日程状态。如果tblStudentSchedule中的课程或教师字段为空,或者在tblStudentSchedule中未找到相应的记录,则我想显示不完整。否则,我想显示“完成” 期望的结果 Name | Schedule Stat

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

在我的示例中,我想列出tblStudent中所有学生的姓名以及一个字段,该字段指示他们在tblStudentSchedule中的日程状态。如果tblStudentSchedule中的课程教师字段为空,或者在tblStudentSchedule中未找到相应的记录,则我想显示不完整。否则,我想显示“完成”

期望的结果

Name  | Schedule Status
-----------------------
Bob   | Incomplete     
Sally | Incomplete
Jane  | Incomplete
Matt  | Incomplete
Jim   | Complete
我在Access中工作。我会发布我的查询尝试,但我认为它们只会混淆问题。这可能是非常基本的,但我有一个思维障碍,试图把我的大脑围绕在这个问题上

学生

学生时间表

studentID |期间|课程|教师
-------------------------------------
1 | 1 |数学|琼斯
1 | 2 |沃森
2 | 1 |阅读|
4 | 1 |克里克
5 | 1 |数学|琼斯

当未找到匹配项时,
left join
返回一行
null
。因此,当学生不在时间表表中时,也会触发对
ss.course的检查为null

如果在tblStudentSchedule中找不到相应的记录,您可以使用左或右联接将此表中的行作为null coulmns。阅读如下:

然后使用isnull函数转换空列

或者使用case语句检查null

我建议阅读不同类型的连接,特别是外部连接。您可以记录该声明吗?我认为它们工作得很好,f.e.@Andomar a
CASE
只能在VBA代码中使用,您需要在SQL查询中使用
IIf
。哇!感谢所有的快速回复。这很接近,你让我找到了一种我没有考虑过的使用iif的方法,但结果并不是我想要的。请看我的原始帖子中的“期望结果”,看看我指的是什么。每个学生只应列出一次。“Bob”被列了两次,因为有两条记录组成了他的日程表。学生ID和时间段构成主键。课程表中每个学生的记录数量可能不同。也许我的时间表设计全错了?你可以按名称分组,每个组,不完整行的总和必须为零。更新了答案。再次。。哇!谢谢真管用!我看错了。我要花很长时间才能找到这个解决办法。
studentID | studentName
-----------------------
1         | Bob
2         | Sally
3         | Jane
4         | Matt
5         | Jim
studentID | period | course | teacher
-------------------------------------
1         | 1      | math   | Jones
1         | 2      | <null> | Watson
2         | 1      | reading| <null>
4         | 1      | <null> | Crick
5         | 1      | math   | Jones
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