首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将时间数据拆分为多行

将时间数据拆分为多行
EN

Stack Overflow用户
提问于 2017-09-05 21:58:46
回答 5查看 187关注 0票数 2

我想根据员工的打卡时间将他们的时间数据分成多行。对于这个例子,如果他们在早上7点之前打卡,那么在此之前的所有数据将被分成一个新的数据行,而上午7点及之后的所有数据都是另一行数据。以下是具有所需结果集的一些数据的示例。这是为了帮助计算加班时间。如果他们在设定班次之前出现,那么这个时间就是加班费

代码语言:javascript
复制
 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')

下面的Union All建议为我指明了正确的方向,我提出了这个查询集,为早上7:00之前打卡上班的员工创建一个新的时间记录,然后更新原始时间记录。

代码语言:javascript
复制
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
EN

回答 5

Stack Overflow用户

发布于 2017-09-05 22:03:19

使用联合查询:

代码语言:javascript
复制
 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小于7am的所有行,并设置适当的TimeOut。然后选择TimeOut超过7am的所有记录,并设置适当的TimeIn。

票数 2
EN

Stack Overflow用户

发布于 2017-09-05 22:03:25

通过交叉应用的一种快速方法

代码语言:javascript
复制
Select A.ID
      ,A.EmployeeID
      ,A.Date
      ,B.*
 From  TimeData A
 Cross Apply  (values (TimeIn,case when TimeIn<'07:00' then cast('07:00' as time) else TimeOut end)
                     ,(case when TimeIn<'07:00' then cast('07:00' as time) else null end
                      ,case when TimeIn<'07:00' then TimeOut else null end) 
               ) B(TimeIn,TimeOut)
 Where B.TimeIn <> B.TimeOut

返回--添加了一个7-3记录的

票数 1
EN

Stack Overflow用户

发布于 2017-09-05 22:04:03

使用UNION ALL并编写一个获取前7部分的顶部查询和一个获取后7部分的底部查询。

然后简单地按EmployeeID, TimeIn排序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46056864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档