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

时间:2012-12-06 14:50:30

标签: sql ms-access null

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

在我的示例中,我想列出 tblStudent 中所有学生的姓名,以及在 tblStudentSchedule中指示其日程安排状态的字段 即可。如果 tblStudentSchedule 中的 课程 教师 字段在 tblStudentSchedule 中找到Null或没有相应的记录然后我想显示" Incomplete" 。否则,我想显示"完成"

期望的结果

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

我正在访问中工作。我会发布我的查询尝试,但我认为他们只会混淆问题。这可能是非常基本的,但我正在试图将我的大脑包裹在这个周围。

tblStudent

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

2 个答案:

答案 0 :(得分: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 

当找不到匹配项时,left join会返回null的单行。因此,当学生缺席时间表时,ss.course is null上的检查也会触发。

答案 1 :(得分:0)

如果找不到tblStudentSchedule中的相应记录,则可以使用左连接或右连接从此表中获取行作为null coulmns。请阅读以下内容:

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