2015-07-03 75 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來驗證。

請評論,如果和作爲調整/進一步的細節是必需的。