我必须加入两个表, Emphours 和 EmpStatus ,以便让每位员工每天的工作时间和工作状态。
我试图模拟这种情况。 我需要类似于表3的结果。
小时数也可以每周分组。
我需要的是每个员工每周的工作时间以及他当时的状态和职位。
注意:
发薪日是每隔一个星期五;一周从周六到周五。
表跟踪员工状态何时发生变化。
设置dateformat mdy; 声明@EmpHours表 (员工int,工作日日期,发薪日期,小时int,职位varchar(50)); 插入@EmpHours值 (101, '1/1/2014年', '1/3/2014年',8 '助理'), (101, '1/3/2014年', '1/3/2014年',8 '助理'), (101, '1/4/2014年', '1/17/2014年',8 '助理'), (101, '1/5/2014年', '1/17/2014年',8 '助理'), (101, '1/7/2014年', '1/17/2014年',8 '助理'), (101, '1/8/2014年', '1/17/2014年',8 '助理'), (101, '1/9/2014年', '1/17/2014年',8 '助理'), (101, '1/11/2014年', '1/17/2014年',8 '助理'), (101, '1/13/2014年', '1/17/2014年',8 '助理'), (101, '1/14/2014年', '1/17/2014年',8 '助理'), (101, '1/18/2014年', '2/14/2014年',8 '助理'), (102, '1/1/2014年', '1/3/2014年',7, '管理器'), (102, '1/25/2014年', '1/31/2014年',7, '管理器'), (102, '1 /二千〇一十四分之二十六', '1/31/2014年',7, '管理器'), (102, '1/28/2014年', '1/31/2014年',7, '管理器'), (102, '1/31/2014年', '1/31/2014年',7, '管理器'), (103, '1/1/2014年', '1/3/2014年',5 '实习生'), (103, '1/31/2014年', '1/31/2014年',6 '实习生'), (104, '1/14/2014年', '1/17/2014年',5 '监'), (104, '1 /二千零一十四分之三十', '1 /二千〇一十四分之三十一',6 '监');
- 从@EmpHours中选择* 声明@EmpStatus表 (employee int,start_date date,status varchar(20)); 插入@EmpStatus值 (101, '1/1/2014年', '兼职'), (101, '1/18/2014年', '全职'), (102, '1/1/2014年', '季节性'), (102, '1/18/2014年', '全职'), (103, '1/1/2014年', 'partime'), (103, '1/18/2014年', '全职'), (104, '1/4/2014年', '兼职'), (104, '1 /二千零十四分之十八', '全职');
表3
employee status hours position workday weekend payday
101 parttime 8 assistant 1/1/2014 1/3/2014 1/3/2014
101 parttime 8 assistant 1/3/2014 1/3/2014 1/3/2014
101 parttime 8 assistant 1/4/2014 1/10/2014 1/17/2014
101 parttime 8 assistant 1/5/2014 1/10/2014 1/17/2014
101 parttime 8 assistant 1/7/2014 1/10/2014 1/17/2014
101 parttime 8 assistant 1/8/2014 1/10/2014 1/17/2014
101 parttime 8 assistant 1/9/2014 1/10/2014 1/17/2014
101 parttime 8 assistant 1/11/2014 1/17/2014 1/17/2014
101 parttime 8 assistant 1/13/2014 1/17/2014 1/17/2014
101 parttime 8 assistant 1/14/2014 1/17/2014 1/17/2014
101 fulltime 8 assistant 1/18/2014 1/24/2014 2/14/2014
102 seasonal 7 manager 1/1/2014 1/3/2014 1/3/2014
102 fulltime 7 manager 1/25/2014 1/25/2014 2/14/2014
102 fulltime 7 manager 1/26/2014 1/26/2014 2/14/2014
102 fulltime 7 manager 1/28/2014 1/28/2014 2/14/2014
102 fulltime 7 manager 1/31/2014 1/31/2014 2/14/2014
103 parttime 5 intern 1/1/2014 1/3/2014 1/3/2014
103 fulltime 6 intern 1/31/2014 1/31/2014 2/14/2014
104 parttime 5 supervisor 1/14/2014 1/17/2014 1/17/2014
104 fulltime 6 supervisor 1/30/2014 1/31/2014 1/31/2014
答案 0 :(得分:0)
SELECT EH.Employee
,ES.[Status]
,SUM(EH.[Hours]) AS Total_Hours
,EH.Position
,EH.Workday
,DATEADD(dd, 7-(DATEPART(dw, EH.Workday)), EH.Workday) AS [WeekEnd]
,EH.PayDay
FROM EmpHours EH INNER JOIN EmpStatus ES
ON EH.Employee = ES.Employee
GROUP BY EH.Employee,ES.[Status],EH.Position,EH.Workday,EH.PayDay
,DATEADD(dd, 7-(DATEPART(dw, EH.Workday)), EH.Workday)