2015-07-03 76 views
0

我刚刚接管了数据库,发现存储的数据有很多地方没有标准化。运营商名称记录不以标准化方式存储。我正在努力实现标准化,以便分析数据变得更加容易。以下是我需要帮助的3个表格。我需要更新名为TimeCards的表格上的信息。从另一个没有类似值的表中更新表

tblEmployees

ID FirstName LastName Num 
234 Saijimon Joseph306 306 
235 Pasquale Partipilo 299 

与此表的主要问题是,有姓中间的数字的ID 234如图所示,但显示在ID 235.我已经做出了新有些则完全正常下表来纠正这些变化。

tblEmployeeMain

ID FirstName LastName Num 
234 Saijimon Joseph  306 
235 Pasquale Partipilo 299 

我们的主要问题。我从下面的表格中获取表格的信息。和形式使用从tblEmployees

tblTimeCards

TimeCard# Employee   Hours 
27742  Joseph306  35 
27743  Partipilo  36 

有没有办法更新所有tblTimecards现有条目信息,使得存储的信息如下图所示?

TimeCard# Employee     Hours 
27742  Joseph Saijimon 306  35 
27743  Partipilo Pasquade 299  36 

以下是我尝试使用的查询,但因为没有加入,我坚持要做什么。

UPDATE tblTimeCards 
SET tblTimeCards.Employee = tblEmployeeMain.[Last Name]+" "+tblEmployeeMain.[First Name]+" "+tblEmployeeMain.[no] 
WHERE tblTimeCards.Employee = "Joseph%" AND tblEmployeeMain.[Last Name] = "Joseph" ; 

我不熟悉更新查询。

+0

您可以更改* tblTimeCards *的设计以包含引用* tblEmployees *中的员工标识号的外键吗? – HansUp

+0

哦...我看到你正在尝试做...让我试试...谢谢! – SunRay

+0

由于管理员权限的限制,我无法这样做..是否还有其他任何关于我可以尝试的回合 – SunRay

回答

1

您可以添加一列名为ID_Employee考勤卡表。此列起到外键的作用,可用于创建表tblEmployeesTimeCard之间的关系。

CREATE TABLE TimeCard 
(
    Timecard INT PRIMARY KEY, 
    Employee VARCHAR(50), 
    Hours INT, 
    ID_Employee INT 
) 

然后用下面的代码表中的考勤卡

UPDATE TimeCard 
SET Employee = tblEmployees.LastName + ' ' + tblEmployees.FirstName + ' ' + CAST(tblEmployees.Num AS VARCHAR) 
FROM tblEmployees INNER JOIN TimeCard 
ON tblEmployees.ID = TimeCard.ID_Employee 

在您所提供的表的实际形式更新的特定数据时,不能表之间的数据绑定tblEmployeesTimeCard

+0

那么如何用ID值更新新列呢? – SunRay

+0

所以我为tblTimeCards创建了一个新的ID列(在这种情况下是num),然后更新了tblTimeCards的ID。最后使用tblEmployeeMain更新 – SunRay

0

您正试图在这种情况下tblemployemain你应该使用update更新tbltimecard与加盟

UPDATE tblTimeCards 
SET tblTimeCards.Employee = tblEmployeeMain.[Last Name]+" "+tblEmployeeMain.[First Name]+" "+tblEmployeeMain.[no] 
from (select timcard#,First name, Last name, no from tblemployeemain) 
WHERE tblTimeCards.timecard# = tblEmployeeMain.timcard#; 
+0

这是行不通的,因为tblEmployeeMain中没有timecard# – SunRay

0

在MS SQL Server中的以下作品2008

UPDATE tblTimeCards 
SET employee = (SELECT CONCAT(lastName, ' ', firstName, ' ', id) 
       FROM tblEmployeeMain 
       WHERE tblTimeCards.employee = 
         CONCAT(tblEmployeeMain.lastName, tblEmployeeMain.num) 
       ) 
WHERE employee LIKE '%[0-9]' 
    AND CHARINDEX(' ', employee) = 0 
; 

UPDATE tblTimeCards 
SET employee = (SELECT CONCAT(lastName, ' ', firstName, ' ', id) 
       FROM tblEmployeeMain 
       WHERE tblTimeCards.employee = tblEmployeeMain.lastName 
       ) 
WHERE employee NOT LIKE '%[0-9]' 
; 

看到它在行动:SQL Fiddle
对不起,手头没有MS Access来验证。

请评论,如果和作为调整/进一步的细节是必需的。