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