含有条件的水晶报告时差公式

时间:2018-03-05 17:59:02

标签: sql-server crystal-reports crystal-reports-2016

我正在尝试在制造业务中创建一份劳动效率报告,该报告链接到2个不同的MS SQL数据库。

“数据库A”包含有关员工轮班时所做工作的信息。

“数据库B”包含有关员工在工资单信息中输入或输出的时间的信息。

我要报告的一个比较是员工登录工作的总时间与他们在建筑物中计时的总时间。数据与员工编号有关。主报告链接到数据库A,并在“员工姓名”上分组,在组页脚中,有一个链接到数据库B的子报告,员工姓名作为参数传递。

我的问题是数据库B记录时钟的方式。我正在使用SQL命令来收集数据:

SELECT 
tws.date_and_time
, CONVERT(date, tws.date_and_time) AS 'Date'
,te.first_name
, te.last_name
, concat(te.first_name,' ', te.last_name) AS 'ConcatName'
, CASE WHEN tws.flag IN (1,3) THEN 1 ELSE 0 END as manual_adjustment
, ROW_NUMBER() OVER (PARTITION BY tw.date_and_time ORDER BY tws.date_and_time ASC) AS swipe_number
, ROW_NUMBER() OVER (PARTITION BY tw.date_and_time ORDER BY tws.date_and_time ASC) % 2 AS in_swipe

FROM temployee te
INNER JOIN twork tw
ON te.employee_id = tw.employee_id AND tw.type = 1000
INNER JOIN twork_swipe tws
on tw.work_id = tws.work_id

“swipe_number”详细说明该记录在该时间段内的刷卡次数(例如,第1次,第2次,第3次等)

“in_swipe”显示1,如果这是员工时钟,或者如果员工退出时显示0。

我正在分组日期的子报告。

如果一名员工在同一天进出一次,这是相对直接的,但是我很难弄清楚如果一名员工在轮班期间多次进出时间(例如休息)或者如果一名员工在一天上班而在另一天上班(例如夜班)。

我需要计算一个员工的总时间,所以我需要评估当天的第一个时钟是否是“刷卡”,(swipe_number = 1 AND in_swipe = 1)如果不是,它不应该记录为swipe_number 2和1之间的差异,它应该是从一天的开始(00:00:0000)到swipe_number = 1,因为这表明员工自午夜以来一直在那里。

同样,如果当天的最后一个(或仅限)“swipe_number”为“刷卡”,则时间应记录在该时间与23:59:5999之间。

除此之外,我需要找到刷卡数= 2&的日期时间字段之间的时间。 1,4和4 3,6和5等(没有固定次数的滑动)。

这可以在公式中动态处理吗?

0 个答案:

没有答案