【问题标题】:SQL display status for records with null values具有空值的记录的 SQL 显示状态
【发布时间】:2012-12-06 14:50:30
【问题描述】:

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

在我的示例中,我想在 tblStudent 中列出所有学生的姓名,以及在 tblStudentSchedule 中指示他们的日程安排状态的字段。如果 tblStudentSchedule 中的 courseteacher 字段为 Null 或 tblStudentSchedule 中没有相应记录,然后我想显示 “不完整”。否则,我想显示“完成”

想要的结果

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

【问题讨论】:

  • 我建议阅读不同类型的连接,尤其是外连接

标签: sql ms-access null


【解决方案1】:
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 的检查。

【讨论】:

  • 你能记录下这个声明吗?我认为他们工作得很好,f.e. techonthenet.com/access/functions/advanced/case.php
  • @Andomar a CASE 只能在 VBA 代码中使用,您需要在 SQL 查询中使用 IIf
  • 哇!感谢所有快速回复。这很接近,你让我知道了一种我没有考虑过的使用 iif 的方法,但结果并不完全是我想要的。请在我的原始帖子中查看“期望的结果”,看看我指的是什么。每个学生只能列出一次。 “Bob”被列出了两次,因为有两条记录构成了他的日程。 studentID 和句点构成主键。对于每个学生,时间表可能具有可变数量的记录。也许我的日程表设计全错了?
  • 您可以按名称分组,并且每个组都说不完整行的总和必须为零。已更新答案。
  • 再次......哇。谢谢!这样可行!我看错了。我需要很长时间才能得出这个解决方案。
【解决方案2】:

如果在 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

【讨论】:

    猜你喜欢
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多