如何在 SQL Server 2014 中将两个表中的两个日期时间累积为 VIEW?

How to accummulate two datetime in two tables as VIEW in SQL Server 2014?

如何在 SQL Server 2014 中查询在两个 table 中累积两个日期时间列?这是供您参考的示例:

入住 table

InID       UserID     CheckInTime
---------------------------------
IN-001     1          2018-11-10 08:00:00
IN-002     2          2018-11-15 07:00:00

退房 table

OutID      UserID     CheckOutTime
----------------------------------
OUT-001    1          2018-11-10 12:00:00
OUT-002    2          2018-11-15 14:00:00

结果集(预期)

ResultID     UserID    InID     OutID     WorkTimeinHour
--------------------------------------------------------
1            1         IN-001   OUT-001   4
2            2         IN-002   OUT-002   7

针对您目前的情况,您可以尝试如下操作。

假设“-”后的IN和OUT id与一个条目相同。

SELECT ROW_NUMBER() 
         OVER( 
           ORDER BY (SELECT NULL)) AS ResultIt, 
       T1.inid, 
       T2.outid, 
       DATEDIFF(hh, T2.checkouttime, T1.checkintime) 
FROM   checkin T1 
       INNER JOIN checkout T2 
               ON REPLACE(T1.inid, 'IN-', '') = REPLACE(T2.outid, 'OUT-', '') 

由于在 JOIN 中使用了 REPLACE,此查询将无法很好地处理大量数据。理想情况下,您应该有一个标识符来标识 IN 和 OUT 事务。

类似于@PSK,我用STUFF函数替换了"IN-"和"OUT-"字符

但是由于这些都是在JOIN条件下,那些操作会造成性能损失 最好在两个表中都使用数字列而不是无用的 "IN-" 和 "OUT-" 包含字符串列

select
    i.UserId, i.InID, CheckInTime, o.OutID, CheckOutTime,
    dbo.fn_CreateTimeFromSeconds(DATEDIFF(ss, CheckInTime, CheckOutTime)) as TotalTime
from CheckIn i
inner join CheckOut o
    on i.UserId = o.UserId and
       STUFF (i.InID,1,3,'') = STUFF (o.OutID,1,4,'')

此外,我使用了自定义用户定义的 fn_CreateTimeFromSeconds function to format time HH:MI:SS 格式

希望对您有所帮助