java—将两个条目行(开始时间和结束时间)连接为talend中的一行

aij0ehis  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(304)

我有来自ms sql数据库的数据,它与员工的工作时间有关。
问题是,开始时间和结束时间存储为两个不同的条目,因此当员工来时,他扫描他的徽章,这被认为是到达时间,当他离开时,他再次扫描他的徽章,这被认为是离开时间。有一列可以帮助区分开始时间和结束时间(codenr列:b1=starttime,b2=endtime)
我的table就是这个样子

现在我需要这些数据作为一个单独的条目,以talend顺序从数据库中,
所以看起来应该是

为了实现这一点,请使用什么(特别是在talend中,以及何时比ms-sql更复杂)?

lstz6jyr

lstz6jyr1#

CREATE TABLE EmployeeWorkLoad(
EmployeeNr bigint,
Year int,
Month int,
Day int,
Hour int,
Minute int,
CodeNr char(2)
)

Insert into [EmployeeWorkLoad] ( [EmployeeNr],[Year],[Month] ,[Day],[Hour], [Minute] ,[CodeNr]) Values (1,2020,1,4,8,30,'B1'), 
(1,2020,1,4,16,45,'B2'), 
(1,2020,1,6,8,15,'B1'), 
(1,2020,1,6,16,45,'B2'),
(2,2020,3,2,8,10,'B1'), 
(2,2020,3,2,16,5,'B2')

GO

6行受影响

WITH CTE AS (
select EmployeeNr,Year,Month,Day,

MAX(CASE WHEN CodeNr='B1' THEN Hour  END) AS StartHour,
MAX(CASE WHEN CodeNr = 'B1' THEN Minute END) AS StartMinute,
MAX(CASE WHEN CodeNr = 'B2' THEN Hour END) AS EndHour,
MAX(CASE WHEN CodeNr = 'B2' THEN Minute END) AS EndMinute

from EmployeeWorkLoad
group by EmployeeNr,Year,Month,Day )

SELECT * , ABS(EndHour-StartHour) AS DutationHour
,ABS(IIF(EndMinute <StartMinute, EndMinute+60, EndMinute)- StartMinute) AS DurationMinute
FROM
CTE
GO
EmployeeNr | Year | Month | Day | StartHour | StartMinute | EndHour | EndMinute | DutationHour | DurationMinute
---------: | ---: | ----: | --: | --------: | ----------: | ------: | --------: | -----------: | -------------:
         1 | 2020 |     1 |   4 |         8 |          30 |      16 |        45 |            8 |             15
         1 | 2020 |     1 |   6 |         8 |          15 |      16 |        45 |            8 |             30
         2 | 2020 |     3 |   2 |         8 |          10 |      16 |         5 |            8 |             55

db<>在这里摆弄

相关问题