我想根据员工的上类时间将员工时间数据分成多行。对于这个例子,如果他们在早上 7 点之前上类,那么在此之前的任何内容都将被分成一个新的数据行和早上 7 点的所有内容之后是另一行。下面是一些具有所需结果集的数据示例。这是为了帮助计算加类时间。如果他们在固定类次之前出现,那么那个时间就是加类费
Create Table TimeData(
[ID] [int] IDENTITY(1,1) NOT NULL,
[EmployeeID] int NULL,
[Date] date NULL,
[TimeIn] time NULL,
[TimeOut] time Null,
)
Insert Into TimeData (EmployeeID,Date,Timein,TimeOut)
Values (100,'9/5/2017','06:00','15:00')
结果集
(100,'9/5/2017','06:00','7:00')
(100,'9/5/2017','07:00','15:00')
The Union 下面的所有建议都为我指明了正确的方向,我想出了这个查询集来为早上 7:00 之前打卡的员工创建一个新的时间记录,然后更新原始记录。
BEGIN
INSERT INTO Timedata( EmployeeID,Date,TimeIn,TimeOut)
SELECT
[EmployeeID],
[Date],
[TimeIn] AS [Time], '7:00'
FROM
TimeData
WHERE
[TimeIn] < '07:00:00'
END
BEGIN
UPDATE TimeData Set TimeIn = '07:00' WHERE TimeIN < '07:00' AND TimeOut <> '7:00'
END
最佳答案
使用 UNION 查询:
SELECT EmployeeID, Date, TimeIn, '07:00' as TimeOut FROM timedata WHERE Timein < '07:00'
UNION ALL
SELECT EmployeeID, Date, '07:00', TimeOut FROM timedata WHERE TimeOut > '07:00';
首先选择timein小于早上7点的所有行,并设置合适的TimeOut。然后选择 TimeOut 超过早上 7 点的所有记录并设置适当的 TimeIn。
关于sql - 将时间数据拆分为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46056864/