SQL过程根据其他两个表的值之和更新表

SQL过程根据其他两个表的值之和更新表,sql,subquery,procedure,nested-queries,Sql,Subquery,Procedure,Nested Queries,我有三张桌子: ForecastAccuracy-我想更新此表列三个月预测 tbl_Master-我想通过客户帐户获得金额 tbl_new_prod-我想通过客户帐户获得金额 我想要两个表的总和来更新预测精度中的[3]列。下面的代码使用tbl_Master的SUM正确更新它。我不知道如何在不进行另一次更新的情况下将第三个表合并到此代码中。有没有更好的办法 UPDATE m SET m.ThreeMonthForecast = f.valsum FROM ForecastAccuracy m IN

我有三张桌子: ForecastAccuracy-我想更新此表列三个月预测 tbl_Master-我想通过客户帐户获得金额 tbl_new_prod-我想通过客户帐户获得金额 我想要两个表的总和来更新预测精度中的[3]列。下面的代码使用tbl_Master的SUM正确更新它。我不知道如何在不进行另一次更新的情况下将第三个表合并到此代码中。有没有更好的办法

UPDATE m
SET m.ThreeMonthForecast = f.valsum
FROM ForecastAccuracy m
INNER JOIN
(
    SELECT [Customer Account], SUM([tbl_Master.[3]) valsum
    FROM [tbl_Master Forecast_Dollars]
    WHERE [Cycle] = @ThreeMonthCycle
    GROUP BY [Customer Account]
) f ON m.Account = f.[Customer Account]


tbl_Master

Account      Cycle      [3]
123456       01-14      100.00
654321       01/14      500.00

tbl_new_prod

Account      Cycle      [3]
123456       01-14      300.00
654321       01/14      600.00

tbl_ForecastAccuracy

Account      Cycle      ThreeMonthForecast
123456       01-14      400.00  <--- Sum of Master[3] + Product[3]
654321       01/14      1100.00 <--- Sum of Master[3] + Product[3]

您可以使用一个CTE,将当前from子句与另一个分组/计算包在一起

我还没有测试过这个,所以它甚至不可能正确解析,但希望它能帮助您朝着正确的方向前进

理论上,您在CTE中拥有最终计算所需的值,因此您可以在更新中应用最终分组和计算

;WITH CTE AS
(
    FROM ForecastAccuracy m
    INNER JOIN
    (
        SELECT [Customer Account], SUM([tbl_Master.[3]) valsum
        FROM [tbl_Master Forecast_Dollars]
        WHERE [Cycle] = @ThreeMonthCycle
        GROUP BY [Customer Account]
    ) f ON m.Account = f.[Customer Account]
)
UPDATE m
SET m.ThreeMonthForecast = SUM(CTE.valsum)
FROM CTE
GROUP BY [Customer Account]