SQL过程更新表基于来自两个其他表的值的SUM

时间:2014-02-10 17:27:37

标签: sql subquery procedure nested-queries

我有三张桌子: ForecastAccuracy - 我想更新此表列ThreeMonthForecast tbl_Master - 我希望通过客户帐户获取SUM tbl_new_prod - 我希望通过客户帐户获取SUM 我希望两个表中的SUM总和更新预测精度中的[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]

1 个答案:

答案 0 :(得分:0)

您可以使用围绕当前from子句的CTE进行另一次分组/计算。

我没有对此进行过测试,所以它甚至不太可能正确解析,但希望它能帮助你朝着正确的方向发展。

理论上,您拥有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]