2016-07-22 9 views
0
mit Mitarbeiter-ID übereinstimmen

ich die folgende AbfrageWie Spaltenwert in allen Zeilen zu aktualisieren, die in 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) 

Ich schlug ich hier versuche. Ich möchte die Summe der Arbeitsstunden, die dem Mitarbeitercode entsprechen, berechnen und die Tabelle der Mitarbeiter mit der Summe zum jeweiligen Mitarbeitercode aktualisieren.

Antwort

1

Vielleicht können Sie einen CTE verwenden

;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 

Ich habe keine Daten mit der obigen Abfrage zu testen, aber wenn es nicht für Sie arbeiten, einige Testdaten zur Verfügung stellen, und wir können eine geben genauere Lösung.

Vielleicht müssen Sie den Alias ​​e nach der UPDATE Anweisung verwenden. So würde ich Ihre ursprüngliche Anfrage (Groß-/Kleinschreibung für OCD) schreiben:

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

Kann ich nicht als eine einzige Aussage? – user3331421

+1

Ich denke, das ist eine einzige Aussage. Zuerst erstellen Sie den allgemeinen Tabellenausdruck, dann können Sie ihn darunter verwenden. Ich bin mir ziemlich sicher, dass alles als eine Aussage behandelt werden kann. –

+0

@ user3331421 Dies ist eine andere Möglichkeit, es zu schreiben. Wenn Sie Ihre ursprüngliche Abfrage betrachten, haben Sie am Ende eine zusätzliche Klammer. Ist das ein Tippfehler? Siehe aktualisierte Antwort. – BJones

Verwandte Themen