2015-04-17 79 views
1

我有一个表,我需要更新使用另一个表中的指定值的总和。需要更新的表格被称为EngTasks带有称为RunStatus的字段。 RunStatus可容纳3个值:更新列使用内部加入和聚合函数

  • 1 =未开始
  • 2 =正在进行
  • 3 =完全

我需要看看被称为EngTaskLog其中有一个字段叫做HoursApplied和外键叫EngTaskID。对于每一个记录,我需要看的所有记录在EngTaskLog和总的所有HoursApplied其中EngTaskID =的EngTasks记录需要更新的ID。

我想就突发奇想以下查询,但得到了一个错误:

UPDATE EngTasks 
SET EngTasks.RunStatus = 1 
FROM EngTasks ET 
INNER JOIN 
    EngTaskLog ETL 
ON 
    SUM(ETL.HoursApplied) = 0 

我没有一大堆与查询的经验,所以上面的代码可能看起来荒谬的更有经验的人。

我希望上述内容有意义,我感谢您的时间和帮助。

+0

RunStatus是如何确定的?你想简单地更新每个EngTaskID的总小时数还是更复杂一些? – Gidil

回答

1
UPDATE ET 
    SET ET.RunStatus = 1 
    FROM EngTasks ET 
    INNER JOIN (
     SELECT ETL.EngTaskID, SUM(ETL.HoursApplied) s 
     FROM EngTasks ET 
     INNER JOIN EngTaskLog ETL ON ET.ID = ETL.EngTaskID 
     GROUP BY ETL.EngTaskID 
     HAVING SUM(ETL.HoursApplied) = 0) x ON ET.ID = x.EngTaskID 
+0

谢谢你的回复。我试着查询并得到以下错误: _“Msg 8120,Level 16,State 1,Line 7 列'EngTaskLog.EngTaskID'在选择列表中无效,因为它不包含在聚合函数或GROUP中BY子句“。_ –

+0

检查编辑的答案。 –

+0

工作很好。感谢您的帮助。做得好。 –