2014-02-09 28 views
0

我必须加入两个表EmphoursEmpStatus以获得每位员工每天工作的小时数以及处于哪种状态。加入两个具有多个值的表

我试图模拟这种情况。 我需要导致类似于表3

时间也可以每周进行分组。

所有我需要的是每周每个员工的时间和他的身份和地位在那个时候。

注:

  • 发薪日是每隔五;周从周六到周五。

  • 表追踪雇员状态何时更改。

set dateformat mdy; declare @EmpHours表 (Employee int,workday date,payday date,hours int,position varchar(50)); 插入件插入@EmpHours值 (101, '1 /二千○一十四分之一', '1 /二千〇一十四分之三',8 '助理'), (101, '1 /2014分之3','1/3/(101,'2014年1月5日','助手'), (101,'1/4/2014','1/17/2014',8,'assistant'), (101,'1/7/2014','1/17/2014',8,'assistant'), (101,'1/8/2014',8,'assistant'), '101','1/17/2014','1','助理'), (101,'1/9/2014','1/17/2014' 2014年1月17日','1/17/2014',8,'assistant'), (101,'1/13/2014','1/17/2014',8''assistant'), (101,'1/14/2014','1/17/2014',8,'assistant'), (101,'1/18/2014','2/14/2014',8''assistant '), (102,'1/1/2014','1/3/2014',7,'manager'), (102,'1/25/2014','1/31/2014',7,'manager'), (102,'1/26/2014','1/31/2014',7'经理'), (102,'1/28/2014','1/31/2014',7,'manager'), (102,'1/31/2014','1/31/2014' (103,'1/31/2014','1/3/2014','1/3/2014',5,'intern'), 二千〇一十四分之三十一' ,6 '实习生'), (104, '1/14/2014年', '1/17/2014年',5 '监'), (104, '1/30/2014年' , '1/31/2014年',6 '监');

- 从@EmpHours中选择* declare @EmpStatus表 (employee int,start_date date,status varchar(20)); (101,'1/1/2014','parttime'), (101,'1/18/2014','fulltime'), (102,'1/1/2014 ' '季节性'), (102, '1 /二千零十四分之十八', '全职'), (103, '1 /2014分之1', 'partime'), (103,' 1/18/(104,'1/4/2014','parttime'), (104,'1/18/2014','fulltime');

表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

什么RDBMS是它无论如何??? SQL服务器或Mysql或??? –

+0

SQL服务器 - 感谢 – user3289843

回答

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) 
+0

查询产生重复记录..感谢您的回复 – user3289843