2015-07-03 4 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 к TimeCard таблице. Этот столбец играет роль внешнего ключа, который можно использовать для создания взаимосвязи между таблицей tblEmployees и TimeCard.

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

А затем используйте следующий код для обновления конкретных данных в таблице TimeCard

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

В реальной форме таблиц, которые вы указали, не могут связывать данные между таблицей tblEmployees и TimeCard.

+0

Как вы обновляете новый столбец с идентификационными значениями? – SunRay

+0

, и поэтому я создал новый столбец для идентификаторов (который в этом случае является номером) для tblTimeCards, а затем обновил идентификаторы для tblTimeCards. Наконец обновлено с помощью tblEmployeeMain – SunRay

0

Вы пытаетесь обновить tbltimecard с tblemployemain в этом случае вы должны использовать обновление с присоединиться

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 для проверки.

Прокомментируйте, если и как требуется дополнительная настройка/дальнейшая информация.