ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

打卡记录根据排班表每人每日排班上下班时间自动获取结果打卡记录是属于那是区间

2019-03-20 16:55:52  阅读:522  来源: 互联网

标签:CONVERT varchar 14 刷卡 记录 USERID CHECKTIME 排班 打卡


在这里插入图片描述 目前有1张打卡记录表,1张排班表,效果要打卡记录根据排班表每人每日排班上下班时间自动获取结果打卡记录是属于那是区间的!效果图 在这里插入图片描述
目前问题点:1.视图写法把区间时间写死,没法根据排班信息进行打卡数据分类
求打卡记录表根据排班信息进行打卡数据分类的视图写法,或其它思路可以达到该效果
A.打卡记录表结构 在这里插入图片描述
B.排班信息表结构 在这里插入图片描述
可以关联字段是员工ID 日期

C.目前视图写法如下:
SELECT
REPLACE(LTRIM(DATEDIFF(DAY,‘1899-12-30’, T.刷卡日期))+’.0’+ LTRIM(T4.BADGENUMBER),’ ‘,’’) AS [考勤识别码],
T.USERID AS [员工考勤机上ID],
T4.BADGENUMBER AS [考勤号码],
T.刷卡日期,
ISNULL(T1.白班上午上班, ‘’) AS [白班上午上班],
ISNULL(T6.白班上午下班, ‘’) AS [白班上午下班],
ISNULL(T7.白班下午上班, ‘’) AS [白班下午上班],
ISNULL(T2.白班下午下班, ‘’) AS [白班下午下班],
ISNULL(T3.白班晚上上班, ‘’) AS [白班晚上上班],
ISNULL(T5.白班晚上下班, ‘’) AS [白班晚上下班],
ISNULL(T10.夜班上午上班, ‘’) AS [夜班上午上班],
ISNULL(T11.夜班上午下班, ‘’) AS [夜班上午下班],
ISNULL(T8.夜班晚上上班, ‘’) AS [夜班晚上上班],
ISNULL(T9.夜班晚上下班, ‘’) AS [夜班晚上下班]

FROM
(SELECT USERID, CONVERT(varchar(10), CHECKTIME, 120) AS 刷卡日期
FROM dbo.CHECKINOUT
GROUP BY USERID, CONVERT(varchar(10), CHECKTIME, 120)) AS T
LEFT OUTER JOIN (SELECT USERID, CONVERT(varchar(10), CHECKTIME, 120) AS 刷卡日期, MIN(CONVERT(TIME, CHECKTIME, 114)) AS 白班上午上班
FROM dbo.CHECKINOUT AS CHECKINOUT_3
WHERE (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) < ‘09:00:00’)
GROUP BY USERID, CONVERT(varchar(10), CHECKTIME, 120)) AS T1 ON T1.USERID= T.USERID AND T1.刷卡日期= T.刷卡日期
LEFT OUTER JOIN (SELECT USERID, CONVERT(varchar(10), CHECKTIME, 120) AS 刷卡日期, MAX(CONVERT(TIME, CHECKTIME, 14)) AS 白班上午下班
FROM dbo.CHECKINOUT AS CHECKINOUT_3
WHERE (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) >= ‘09:00:00’) AND (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) < ‘12:45:00’)
GROUP BY USERID, CONVERT(varchar(10), CHECKTIME, 120)) AS T6 ON T6.USERID= T.USERID AND T6.刷卡日期= T.刷卡日期
LEFT OUTER JOIN (SELECT USERID, CONVERT(varchar(10), CHECKTIME, 120) AS 刷卡日期, MAX(CONVERT(TIME, CHECKTIME, 14)) AS 白班下午上班
FROM dbo.CHECKINOUT AS CHECKINOUT_3
WHERE (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) >= ‘12:45:00’) AND (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) < ‘14:30:00’)
GROUP BY USERID, CONVERT(varchar(10), CHECKTIME, 120)) AS T7 ON T7.USERID= T.USERID AND T7.刷卡日期= T.刷卡日期
LEFT OUTER JOIN (SELECT USERID, CONVERT(varchar(10), CHECKTIME, 120) AS 刷卡日期, MAX(CONVERT(TIME, CHECKTIME, 14)) AS 白班下午下班
FROM dbo.CHECKINOUT AS CHECKINOUT_2
WHERE (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) >= ‘14:30:00’) AND (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) < ‘18:30:00’)
GROUP BY USERID, CONVERT(varchar(10), CHECKTIME, 120)) AS T2 ON T2.USERID= T.USERID AND T2.刷卡日期= T.刷卡日期
LEFT OUTER JOIN (SELECT USERID, CONVERT(varchar(10), CHECKTIME, 120) AS 刷卡日期, MAX(CONVERT(TIME, CHECKTIME, 14)) AS 白班晚上上班
FROM dbo.CHECKINOUT AS CHECKINOUT_1
WHERE (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) >= ‘18:30:00’) AND (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) < ‘18:30:00’)
GROUP BY USERID, CONVERT(varchar(10), CHECKTIME, 120)) AS T3 ON T3.USERID= T.USERID AND T3.刷卡日期= T.刷卡日期
LEFT OUTER JOIN (SELECT USERID, CONVERT(varchar(10), CHECKTIME, 120) AS 刷卡日期, MAX(CONVERT(TIME, CHECKTIME, 14)) AS 白班晚上下班
FROM dbo.CHECKINOUT AS CHECKINOUT_1
WHERE (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) >= ‘18:30:00’)
GROUP BY USERID, CONVERT(varchar(10), CHECKTIME, 120)) AS T5 ON T5.USERID= T.USERID AND T5.刷卡日期= T.刷卡日期
LEFT OUTER JOIN (SELECT USERID, CONVERT(varchar(10), CHECKTIME, 120) AS 刷卡日期, MAX(CONVERT(TIME, CHECKTIME, 14)) AS 夜班晚上上班
FROM dbo.CHECKINOUT AS CHECKINOUT_1
WHERE (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) >= ‘16:45:00’) AND (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) < ‘21:00:00’)
GROUP BY USERID, CONVERT(varchar(10), CHECKTIME, 120)) AS T8 ON T8.USERID= T.USERID AND T8.刷卡日期= T.刷卡日期
LEFT OUTER JOIN (SELECT USERID, CONVERT(varchar(10), CHECKTIME, 120) AS 刷卡日期, MAX(CONVERT(TIME, CHECKTIME, 14)) AS 夜班晚上下班
FROM dbo.CHECKINOUT AS CHECKINOUT_1
WHERE (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) >= ‘21:00:00’)
GROUP BY USERID, CONVERT(varchar(10), CHECKTIME, 120)) AS T9 ON T9.USERID= T.USERID AND T9.刷卡日期= T.刷卡日期
LEFT OUTER JOIN (SELECT USERID, CONVERT(varchar(10), CHECKTIME, 120) AS 刷卡日期, MAX(CONVERT(TIME, CHECKTIME, 14)) AS 夜班上午上班
FROM dbo.CHECKINOUT AS CHECKINOUT_1
WHERE (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) >= ‘00:00:01’) AND (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) < ‘02:00:00’)
GROUP BY USERID, CONVERT(varchar(10), CHECKTIME, 120)) AS T10 ON T10.USERID= T.USERID AND T10.刷卡日期= T.刷卡日期
LEFT OUTER JOIN (SELECT USERID, CONVERT(varchar(10), CHECKTIME, 120) AS 刷卡日期, MAX(CONVERT(TIME, CHECKTIME, 14)) AS 夜班上午下班
FROM dbo.CHECKINOUT AS CHECKINOUT_1
WHERE (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) >= ‘02:00:00’) AND (CAST(CONVERT(varchar(8), CHECKTIME, 14) AS time) < ‘10:00:00’)
GROUP BY USERID, CONVERT(varchar(10), CHECKTIME, 120)) AS T11 ON T11.USERID= T.USERID AND T11.刷卡日期= T.刷卡日期
LEFT OUTER JOIN dbo.USERINFO AS T4 ON T4.USERID = T.USERID
WHERE
T4.BADGENUMBER IS NOT NULL

标签:CONVERT,varchar,14,刷卡,记录,USERID,CHECKTIME,排班,打卡
来源: https://blog.csdn.net/weixin_37897505/article/details/88692332

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有