您的数据
DECLARE @TABLE TABLE
(USERID VARCHAR(10),EmpName VARCHAR(10),InOutTime TIME,InOutDate DATE)
INSERT INTO @TABLE VALUES
('001','John','08:30','12-12-13'),('001','John','04:30','12-12-13'),
('002','Sam','05:30','12-12-13'),('002','Sam','04:30','12-12-13')
查询
SELECT t1.EmpName
, t1.InOutTime AS InTime
, t2.InOutTime AS [TimeOut]
, t1.InOutDate AS [DateVisited]
, DATEDIFF(HOUR,t1.InOutTime, t2.InOutTime) TotalHours
FROM @TABLE t1 INNER JOIN @TABLE t2
ON t1.USERID = t2.USERID
AND t1.InOutDate = t2.InOutDate
AND t1.InOutTime < t2.InOutTime
结果集
╔═════════╦══════════════════╦══════════════════╦═════════════╦════════════╗
║ EmpName ║ InTime ║ TimeOut ║ DateVisited ║ TotalHours ║
╠═════════╬══════════════════╬══════════════════╬═════════════╬════════════╣
║ John ║ 04:30:00.0000000 ║ 08:30:00.0000000 ║ 2013-12-12 ║ 4 ║
║ Sam ║ 04:30:00.0000000 ║ 05:30:00.0000000 ║ 2013-12-12 ║ 1 ║
╚═════════╩══════════════════╩══════════════════╩═════════════╩════════════╝
为什么你存储日期和时间分开LY?当有一排开始时间但不是结束时间时,你想要发生什么?相反呢?如果时间跨越一个日期怎么办?当前的模式使得精确地表示进出时间非常困难,因为当没有任何东西存在时,或者它们的任何属性都无法执行。 –
acutally comapny需要这种方式 –
我认为,但他们说,它应该是这样的 –