“两条领带”;事件表“;连同时间戳SQL查询

“两条领带”;事件表“;连同时间戳SQL查询,sql,sql-server-2008,Sql,Sql Server 2008,我在SQLServer中有两个DB表。我希望有一个查询结果,将操作符名称绑定到另一个表中的行记录。i、 e.对于“表B”中的每一行记录,它将检查事件发生时哪个操作员已登录。例外情况是没有操作员登录,因此结果中有空字段 下面的屏幕截图概述了这两个表以及示例结果的外观。任何帮助都将不胜感激…我在这里不适合 表 操作员姓名|登录时间|注销时间 汤姆2014年1月10日12:00 2014年1月10日12:09 迪克10/01/2014 12:10 10/01/2014 12:35 哈里王子2014年1

我在SQLServer中有两个DB表。我希望有一个查询结果,将操作符名称绑定到另一个表中的行记录。i、 e.对于“表B”中的每一行记录,它将检查事件发生时哪个操作员已登录。例外情况是没有操作员登录,因此结果中有空字段

下面的屏幕截图概述了这两个表以及示例结果的外观。任何帮助都将不胜感激…我在这里不适合

表 操作员姓名|登录时间|注销时间 汤姆2014年1月10日12:00 2014年1月10日12:09

迪克10/01/2014 12:10 10/01/2014 12:35

哈里王子2014年1月10日12:40 2014年1月10日12:45

表B 时间戳|事件 2014年1月10日12:03 A

2014年1月10日12:15 B

2014年1月10日12时36分

所需的查询结果 操作员名称|时间戳|事件名称 Tom 10/01/2014 12:03 A

迪克2014年1月10日12:15 B


“无操作员”2014年1月10日12:36 A

尝试如下外部应用:

SELECT a.OperatorName
    ,b.TIMESTAMP
    ,b.EventName
FROM tableB b
OUTER APPLY (
    SELECT ISNULL(a.OperatorName,'No Operator')
    FROM tableA
    WHERE b.TIMESTAMP BETWEEN a.LogOnTime
            AND a.LogOutTime
    ) AS a

尝试如下所示的外部应用:

SELECT a.OperatorName
    ,b.TIMESTAMP
    ,b.EventName
FROM tableB b
OUTER APPLY (
    SELECT ISNULL(a.OperatorName,'No Operator')
    FROM tableA
    WHERE b.TIMESTAMP BETWEEN a.LogOnTime
            AND a.LogOutTime
    ) AS a

我将通过显式的
左连接来实现这一点:

SELECT COALESCE(a.OperatorName, 'No Operator') as Operator, b.TIMESTAMP, b.EventName
FROM tableB b LEFT JOIN
     tableA a
     ON b.Timestamp BETWEEN a.LogOnTime and a.LogOutTime;

我将通过显式的
左连接来实现这一点:

SELECT COALESCE(a.OperatorName, 'No Operator') as Operator, b.TIMESTAMP, b.EventName
FROM tableB b LEFT JOIN
     tableA a
     ON b.Timestamp BETWEEN a.LogOnTime and a.LogOutTime;