我有三张桌子: 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]
答案 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]