2016-07-22 46 views
0

的所有行更新列值嘗試以下查詢我如何與員工ID匹配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 

我沒有任何數據來檢驗上述查詢,但如果它不爲你工作,提供一些測試數據,我們可以給出一個更準確的解決方案

也許你需要在UPDATE聲明後使用別名e。這是我會如何寫你原來的查詢(大寫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