2014-02-10 7 views
0

У меня есть три таблицы: ForecastAccuracy - Я хочу, чтобы обновить этот столбец таблицы ThreeMonthForecast tbl_Master - Я хочу, чтобы получить сумму на счет Клиента tbl_new_prod - Я хочу получить SUM по счету клиента Я хочу, чтобы сумма SUM из двух таблиц обновила столбец [3] в точности прогноза. Код ниже обновляет его с помощью SUM от tbl_Master правильно. Я не знаю, как включить третью таблицу в этот код, не делая другого обновления. Есть ли лучший способ сделать это?таблицы SQL Update Процедура, основанная на сумме значений двух других таблиц

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

Вы можете использовать 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]