根据列进行联接,并在视图中显示不匹配和匹配行的结果

詹姆斯·佛朗哥·哈迪

我计划使用内部连接和case将3个表连接在一起。

背景:我正在尝试首先通过deviceid进行联接devicedevicemessage表链接。

接下来是timetable使用roomidclassstartdate以及和classenddate将前2个表链接到该

我希望它显示既匹配roomid的行,又匹配表中的localtime列,该行devicemessage介于ClassStartDateClassEndDate来自时间表表之间。

我知道,因为内部联接仅匹配的行显示,我也希望我的视图来显示这些合并行devicedevicemessage表其localtime列的值不介于classstartdateclassenddatetimetable表。Timetable表中的列在视图中为null或为空。

设备表具有以下列:RoomID,RoomName,DeviceID

DeviceMessageTable具有以下列:DeviceID,Occupancy,LocalTime

时间表包含以下列:SubjectCode,Day,ClassStartDate,ClassEndDate,RoomID

我目前拥有的代码:

Create View v_ClassroomOccupancy
AS
Select A.[RoomCode],A.[RoomName],A.[DeviceID],
         B.[Occupancy],B.[LocalTime],
           C.[CLASSGROUP],C.[DAY], C.[CLASSSTARTDATE], C.[CLASSENDDATE], C.[DURATION],

CASE
WHEN (B.LocalTime BETWEEN C.CLASSSTARTDATE AND C.CLASSENDDATE) 
    AND B.Occupancy = 1 THEN 'Booked And Occupied'
WHEN (B.LocalTime NOT BETWEEN C.CLASSSTARTDATE AND C.CLASSENDDATE) 
    AND B.Occupancy = 1 THEN 'Not Booked but Occupied'
WHEN (B.LocalTime BETWEEN C.CLASSSTARTDATE AND C.CLASSENDDATE)
    AND B.Occupancy = 0 THEN 'Booked but Not Occupied'
ELSE 'Not booked and Not Occupied' 
END AS ClassroomStatus

From Device A
INNER JOIN DeviceMessageHistory B ON  B.DeviceID=A.DeviceID
INNER JOIN ClassTimeTable C ON  (B.LocalTime between C.CLASSSTARTDATE and C.CLASSENDDATE) WHERE C.ROOMID = A.RoomCode;

我试过了,但结果是一个空表。

戈登·利诺夫

您需要一个left join,但其措辞应为:

SELECT . . .
FROM Device d JOIN
     DeviceMessageHistory dmh
     ON  dmh.DeviceID = d.DeviceID JOIN
     ClassTimeTable ctt
     ON dmh.LocalTime BETWEEN ctt.CLASSSTARTDATE AND ctt.CLASSENDDATE AND
        ctt.ROOMID = d.RoomCode

注意:WHERE子句中的逻辑需要移到该ON子句。

我还更改了表别名。学习使用有意义的表别名(表缩写)而不是任意字母。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据两个制表符分隔的文件的第一列进行比较,并在输出文件中打印匹配项和不匹配项

来自分类Dev

在与DATETIME和INT列匹配的表上进行自联接

来自分类Dev

Grep显示匹配和不匹配

来自分类Dev

MySQL:在联接中选择不匹配的行

来自分类Dev

在Elasticsearch结果中显示不匹配的单词

来自分类Dev

根据左联接列值在视图中返回一行

来自分类Dev

视图中的角色名称与UserRole模型和控制器中的RoleID不匹配

来自分类Dev

根据第一列合并文件并在列名不匹配的地方添加零

来自分类Dev

根据匹配的列名和列值提取行值

来自分类Dev

尝试进行内部联接并在API上显示结果

来自分类Dev

MySQL \联接2个表并在一列中显示2行的结果

来自分类Dev

CPU和GPU生成的结果不匹配

来自分类Dev

Google表格不匹配和拆分结果

来自分类Dev

iperf和iptraf结果不匹配

来自分类Dev

元素匹配与大于和小于mongodb之间的结果不匹配

来自分类Dev

根据匹配的行合并两个csv文件,并在linux中添加新列

来自分类Dev

如何突出显示与结果匹配的表行

来自分类Dev

根据组和日期对表单进行排序。当团体人数不匹配时也要留空

来自分类Dev

typeid结果不匹配

来自分类Dev

为什么grep显示不匹配的行?

来自分类Dev

包含不匹配记录的联接

来自分类Dev

在条件为条件的联接表中选择不匹配的行

来自分类Dev

SQL自我联接以及不匹配的行

来自分类Dev

将两个表与不匹配的行联接

来自分类Dev

MySQL用额外的子句左联接返回不匹配的行

来自分类Dev

行和列的索引匹配

来自分类Dev

从多表中选择联接,如果列不匹配,则返回null

来自分类Dev

搜索结果和构面结果不匹配

来自分类Dev

比较两个文件并写入不匹配的行和不匹配的列。指出不匹配的列是我的主要问题陈述

Related 相关文章

  1. 1

    根据两个制表符分隔的文件的第一列进行比较,并在输出文件中打印匹配项和不匹配项

  2. 2

    在与DATETIME和INT列匹配的表上进行自联接

  3. 3

    Grep显示匹配和不匹配

  4. 4

    MySQL:在联接中选择不匹配的行

  5. 5

    在Elasticsearch结果中显示不匹配的单词

  6. 6

    根据左联接列值在视图中返回一行

  7. 7

    视图中的角色名称与UserRole模型和控制器中的RoleID不匹配

  8. 8

    根据第一列合并文件并在列名不匹配的地方添加零

  9. 9

    根据匹配的列名和列值提取行值

  10. 10

    尝试进行内部联接并在API上显示结果

  11. 11

    MySQL \联接2个表并在一列中显示2行的结果

  12. 12

    CPU和GPU生成的结果不匹配

  13. 13

    Google表格不匹配和拆分结果

  14. 14

    iperf和iptraf结果不匹配

  15. 15

    元素匹配与大于和小于mongodb之间的结果不匹配

  16. 16

    根据匹配的行合并两个csv文件,并在linux中添加新列

  17. 17

    如何突出显示与结果匹配的表行

  18. 18

    根据组和日期对表单进行排序。当团体人数不匹配时也要留空

  19. 19

    typeid结果不匹配

  20. 20

    为什么grep显示不匹配的行?

  21. 21

    包含不匹配记录的联接

  22. 22

    在条件为条件的联接表中选择不匹配的行

  23. 23

    SQL自我联接以及不匹配的行

  24. 24

    将两个表与不匹配的行联接

  25. 25

    MySQL用额外的子句左联接返回不匹配的行

  26. 26

    行和列的索引匹配

  27. 27

    从多表中选择联接,如果列不匹配,则返回null

  28. 28

    搜索结果和构面结果不匹配

  29. 29

    比较两个文件并写入不匹配的行和不匹配的列。指出不匹配的列是我的主要问题陈述

热门标签

归档