sql - 将时间数据拆分为多行

标签 sql sql-server sql-server-2014

我想根据员工的上类时间将员工时间数据分成多行。对于这个例子,如果他们在早上 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/

相关文章:

其他列的 SQL ORDER BY 行为?

sql - 创建一个只有1个数据库权限的用户

sql-server - 精美的 SSRS pdf 报告示例

sql - 如何检索表中两个特定列中的值不同的所有行

sql-server - 发布期间,DACPAC 架构比较在预部署脚本之前运行

sql-server - T-SQL SQL Server 2014 中的 HTML 转义

mysql - 跳过mysql like子句中的字符

sql - Hive-如何获取派生列名称并在同一查询中使用它?

SQL选择具有相同值的连续记录

mysql - 在 SQL 中使用 split_part