使用内部联接和聚合函数更新列

时间:2015-04-17 13:45:01

标签: sql-server sql-update inner-join aggregate-functions

我有一个表需要使用另一个表中指定值的总和进行更新。需要更新的表格称为 EngTasks ,其中包含名为 RunStatus 的字段。 RunStatus 可以包含3个值:

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

我需要查看的表名为 EngTaskLog ,它包含一个名为 HoursApplied 的字段和一个名为 EngTaskID的外键。对于每条记录,我需要查看 EngTaskLog 中的所有记录,并总计所有 HoursApplied ,其中 EngTaskID = ID需要更新的 EngTasks 记录。

我一时兴起尝试了以下查询,但收到了错误:

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

我对查询没有太多经验,因此上述代码对于有更多经验的人来说可能看起来很荒谬。

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

1 个答案:

答案 0 :(得分: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