流水记录的获取

songguozhi 2011-03-04 03:35:34
DECLARE @work TABLE(EmpID INT, workDate INT, StartTime INT, EndTime INT)
DECLARE @workRest TABLE(EmpID INT, RestType INT, RestStartTime INT, RestTimeLen INT)
/*
@work 记录员工每天的上下班时间,@workRest记录员工的休息时间以及休息类型
员工不在@workRest中记录的表示处于工作状态,统计出来休息类型为NULL
*/
/*其中
workDate为上班日期, 例如2011年3月4日则为20110304
StartTime为上班时间,上午9点30分表示为930
RestStartTime表示休息开始时间
RestTimeLen休息的分钟数
*/
INSERT INTO @work( EmpID, workDate, StartTime, EndTime )
SELECT 1001, 20110304, 900, 1730

INSERT INTO @workRest( EmpID, RestID, RestStartTime, RestTimeLen)
SELECT 1, 1, 1005, 15 UNION ALL
SELECT 1, 2, 1200, 30 UNION ALL
SELECT 1, 3, 1530, 15

--希望得到如下的结果
/*
EmpID RestType RestStartTime RestEndTime RestTimeLen
1 NULL 900 1005 65
1 1 1005 1020 15
1 NULL 1020 1200 100
1 2 1200 1230 30
1 NULL 1230 1530 180
1 3 1530 1545 15
1 NULL 1545 1730 105
*/
...全文
111 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
songguozhi 2011-03-04
  • 打赏
  • 举报
回复
再次修正下
DECLARE @work TABLE(EmpID INT, workDate INT, StartTime INT, EndTime INT)
DECLARE @workRest TABLE(EmpID INT, workDate INT, RestType INT, RestStartTime INT, RestTimeLen INT)
/*
@work 记录员工每天的上下班时间,@workRest记录员工的休息时间以及休息类型
员工不在@workRest中记录的表示处于工作状态,统计出来休息类型为NULL
*/
/*其中
workDate为上班日期, 例如2011年3月4日则为20110304
StartTime为上班时间,上午9点30分表示为930
RestStartTime表示休息开始时间
RestTimeLen休息的分钟数
*/
INSERT INTO @work( EmpID, workDate, StartTime, EndTime )
SELECT 1, 20110304, 900, 1730

INSERT INTO @workRest(EmpID, workDate, RestType, RestStartTime, RestTimeLen)
SELECT 1, 20110304, 1, 1005, 15 UNION ALL
SELECT 1, 20110304, 2, 1200, 30 UNION ALL
SELECT 1, 20110304, 3, 1530, 15

SELECT w.EmpID, r.RestType
FROM @work w
JOIN @workRest r
ON w.EmpID = r.EmpID AND w.workDate = r.workDate

--希望得到如下的结果
/*
EmpID RestType RestStartTime RestEndTime RestTimeLen
1 NULL 900 1005 65
1 1 1005 1020 15
1 NULL 1020 1200 100
1 2 1200 1230 30
1 NULL 1230 1530 180
1 3 1530 1545 15
1 NULL 1545 1730 105
*/
songguozhi 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acherat 的回复:]

SQL code

1 NULL 1020 1200 100
1 2 1200 1230 30
1 NULL 1230 1530 180


100 和 180 写反……
[/Quote]
--希望得到如下的结果
/*
EmpID RestType RestStartTime RestEndTime RestTimeLen
1 NULL 900 1005 65
1 1 1005 1020 15
1 NULL 1020 1200 100
1 2 1200 1230 30
1 NULL 1230 1530 180
1 3 1530 1545 15
1 NULL 1545 1730 105
*/

没反得哈,开始时间是一次递增的
songguozhi 2011-03-04
  • 打赏
  • 举报
回复
应该这样的
DECLARE @work TABLE(EmpID INT, workDate INT, StartTime INT, EndTime INT)
DECLARE @workRest TABLE(EmpID INT, workDate INT, RestType INT, RestStartTime INT, RestTimeLen INT)
/*
@work 记录员工每天的上下班时间,@workRest记录员工的休息时间以及休息类型
员工不在@workRest中记录的表示处于工作状态,统计出来休息类型为NULL
*/
/*其中
workDate为上班日期, 例如2011年3月4日则为20110304
StartTime为上班时间,上午9点30分表示为930
RestStartTime表示休息开始时间
RestTimeLen休息的分钟数
*/
INSERT INTO @work( EmpID, workDate, StartTime, EndTime )
SELECT 1001, 20110304, 900, 1730

INSERT INTO @workRest(EmpID, workDate, RestID, RestStartTime, RestTimeLen)
SELECT 1, 20110304, 1, 1005, 15 UNION ALL
SELECT 1, 20110304, 2, 1200, 30 UNION ALL
SELECT 1, 20110304, 3, 1530, 15

SELECT w.EmpID,
FROM @work w
JOIN @workRest r

--希望得到如下的结果
/*
EmpID RestType RestStartTime RestEndTime RestTimeLen
1 NULL 900 1005 65
1 1 1005 1020 15
1 NULL 1020 1200 100
1 2 1200 1230 30
1 NULL 1230 1530 180
1 3 1530 1545 15
1 NULL 1545 1730 105
*/
AcHerat 2011-03-04
  • 打赏
  • 举报
回复

1 NULL 1020 1200 100
1 2 1200 1230 30
1 NULL 1230 1530 180


100 和 180 写反了吧!
songguozhi 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 songguozhi 的回复:]
SQL code
DECLARE @work TABLE(EmpID INT, workDate INT, StartTime INT, EndTime INT)
DECLARE @workRest TABLE(EmpID INT, RestType INT, RestStartTime INT, RestTimeLen INT)
/*
@work 记录员工每天的上下班时间,@workRest记……
[/Quote]

错了,@workRest TABLE(EmpID INT, RestType INT, RestStartTime INT, RestTimeLen INT)中应该加上日期的

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧