2017-07-14 97 views
0

我是一个相对的新手上访问一个问题远远超出了我的技能更新查询从第二个表

我在包含名字叫做现有员工Access表中存储关于雇员的信息,姓氏使用最近数值,员工ID等。

由于员工经常更换班次/职位,我需要一种方法来存储职位名称,班次等历史记录,而不必为具有大量冗余数据的员工存储两条记录。

所以我创建了一个名为分配历史与员工ID,那里可以为同一雇员的ID多个条目之间的关系的第二个表,看起来像

Employee ID | Assigned As Of | Job Title | Shift 
1234  | 01/01/2017  | Manager | A 
1234  | 12/01/2016  | Salesman | A 
5678  | 12/01/2016  | Salesman | B 

现在各种形式的原因,我要把最近的值回我的第一台现有的员工在当前标题位置,像这样

Employee ID | FName   | Last Name | Current Job 
1234  | John   | Smith  | Manager 
5678  | Steve   | Adams  | Salesman 

我已经能够获得最接近的是创建一个表查询到第三个表CurrAssign其中代码是

SELECT a.* 
INTO CurrAssign 
FROM AssignmentHistory AS a 
INNER JOIN (
    SELECT max(a.AssignedAsOf) AS LatestDate, a.EmployeeID 
    FROM AssignmentHistory AS a GROUP BY a.EmployeeID) 
AS SubMax 
ON (a.EmployeeID = SubMax.EmployeeID) 
AND (a.AssignedAsOf = SubMax.LatestDate); 

有关如何将此查询更改为当前员工更新的帮助?或者有更好的方式来格式化和存储这些信息?

回答

0

你可以尝试一个简单的“查找”方法。这会工作吗?

SELECT ce.EmployeeID, ce.FName, ce.LName, 
(SELECT TOP 1 ah.[Job Title] FROM AssignmentHistory ah WHERE ah.EmployeeID = ce.EmployeeID ORDER BY ah.AssignedAsOf DESC) AS CurrentJob--Look up Current Job 
FROM CurrentEmployee ce 
0

因为MS Access需要更新查询是updateable,考虑在查询中使用嵌套结构域的聚集体,和DLookUpDMax

UPDATE Employees e  
SET e.[Current Job] = DLookUp("[Job Title]", "[Assignment History]", 
           "[Employee ID]=" & e.[Employee ID] & 
           " AND [Assigned As Of]=#" & 
           DMax("[Assigned As Of]", "[Assignment History]", 
            "[Employee ID]=" & e.[Employee ID]) & "#")