我们有一个SQL 2008表,按以下顺序保存出勤数据。
uid clock collectdate type 1 2012-10-30 16:13:07.000 2012-10-30 19:29:58.000 in 1 2012-10-30 21:18:50.000 2012-10-30 22:29:58.000 in 2 2012-10-30 16:13:07.000 2012-10-30 19:29:58.000 in 2 2012-10-30 21:18:50.000 2012-10-30 22:29:58.000 in
正确的顺序是将“类型”列设为,输入和输出。但这正是我所面临的问题,因为该系统正用于管理承包商和兼职人员,他们总是错过按下正确的按钮,或者在进行打卡或退出打卡之前根本没有按下正确的按钮。
我们目前依赖此存储过程将时钟数据按正确顺序放置
INSERT INTO attendanceTBL (UID,CollectDate,Clockin,Clockout) SELECT UID ,CollectDate ,MAX(case when type = 'in' then clock end) clockin ,MAX(case when type = 'Out' then clock end) clockout From RAWCLOCKTBL GROUP BY UID,CollectDate RETURN
有没有什么方法可以将“clock”值以正确的顺序移动到同一行,同时忽略“type”列。即,将上表移至。
uid clock clock 1 2012-10-30 16:13:07.000 2012-10-30 21:18:50.000 2 2012-10-30 16:13:07.000 2012-10-30 21:18:50.000
答案 0 :(得分:0)
以下查询将UID和DATE上每个日期和JOIN的UID的IN和OUT时间分组,以获得所需的输出。 LEFT JOIN将确保在没有OUT的情况下返回这些条目(如果需要)。
SELECT
A.UID,
CONVERT(DATE, clock) 'ClockDate',
min(clock) 'ClockIn',
max(clock) 'ClockOut'
FROM
attendanceTBL
GROUP BY uid, CONVERT(DATE, clock)