2016-07-22 2 views
0

Я пытаюсь следующий запросКак обновить значение столбца во всех строках, которые соответствуют с идентификатором сотрудника в SQL

update employee 
set e.Hours = tot.SumofWorkingHours 
from employee e 

inner join (select employeecode, sum(workingHours) as SumofWorkingHours 
      from Time 
      group by employeecode)tot 
      on tot.employeecode=e.code) 

Я ударил здесь. Я хочу рассчитать сумму рабочего времени, соответствующую коду сотрудника, и обновить таблицу сотрудников суммой к соответствующему коду сотрудника.

ответ

1

Может быть, вы можете использовать CTE

;WITH cte AS (
SELECT EmployeeCode, SUM(WorkingHours) AS SumofWorkingHours 
     FROM Time 
     GROUP BY EmployeeCode) 

UPDATE e 
SET e.Hours = cte.SumofWorkingHours 
FROM Employee e 
INNER JOIN cte ON e.Code = cte.EmployeeCode 

У меня нет никаких данных, чтобы проверить приведенный выше запрос с, однако, если он не работает для вас, предоставить некоторые тестовые данные, и мы можем дать более точное решение.

Возможно, вам понадобится псевдоним e после заявления UPDATE. Вот как я напишу ваш первоначальный запрос (капитализация для OCD):

UPDATE e 
SET e.Hours = tot.SumofWorkingHours 
FROM Employee e 
INNER JOIN (SELECT EmployeeCode, SUM(WorkingHours) AS SumofWorkingHours 
      FROM Time 
      GROUP BY EmployeeCode) tot 
      on tot.EmployeeCode = e.Code 
+0

Невозможно иметь одно заявление? – user3331421

+1

Я думаю, что это одно утверждение. сначала вы устанавливаете общее табличное выражение, а затем под ним вы можете его использовать. Я уверен, что все это можно рассматривать как одно утверждение. –

+0

@ user3331421 Это еще один способ его написания. Рассматривая исходный запрос, у вас есть дополнительная скобка в конце. Это опечатка? См. Обновленный ответ. – BJones

Смежные вопросы