2014-02-09 27 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