2014-04-01 34 views
0

我試圖更新的滾動平均值計算一個臨時表(MS Access 2010中)更新表從自身

作爲一個選擇查詢,這個工程來計算3個月的移動平均值,但慢,所以我寧願存儲,只有在必要時更新的值:

SELECT tempQORDistGrouped.Type, tempQORDistGrouped.Supplier, tempQORDistGrouped.DepBkMo, tempQORDistGrouped.Amt, tempQORDistGrouped.Brands, tempQORDistGrouped.T2, tempQORDistGrouped.Brand, (select avg(rolavg.Amt) from tempQORDistGrouped as rolavg 
    where rolavg.Type = tempQORDistGrouped.Type 
    and rolavg.Supplier = tempQORDistGrouped.Supplier 
    and rolavg.Brands = tempQORDistGrouped.Brands 
    and rolavg.Brand = tempQORDistGrouped.Brand 
    and rolavg.DepBkMo between dateadd("m",-2,tempQORDistGrouped.DepBkMo) and tempQORDistGrouped.depbkmo) AS AvgAmt 
FROM tempQORDistGrouped; 

我試過下面的更新查詢,但我覺得我的內部聯接語法糟糕,因爲它不會承認x1.Type爲一個有效的字段(我是否需要將這些字段作爲內部連接字段的一部分而不是在where子句中?):

UPDATE tempQORDistGrouped AS x1 
INNER JOIN (SELECT itmID, avg(Amt) AS RolAvg 
    FROM tempQORDistGrouped 
    WHERE tempQORDistGrouped.Type = x1.Type 
    AND tempQORDistGrouped.Brand = x1.Brand 
    AND tempQORDistGrouped.Brands = x1.Brands 
    AND tempQORDistGrouped.T2 = x1.T2 
    AND tempQORDistGrouped.DepBkMo between dateadd("m",-2,x1.DepBkMo) and x1.DepBkMo 
    GROUP BY itmID 
) AS x2 
ON x1.itmID = x2.itmID 
SET x1.3MonthRollingAmt = x2.RolAvg; 

乾杯

回答

0

未經測試,但應該工作。 我做了列級查詢計算AVG,然後映射回列的其餘

試試這個:

UPDATE tempQORDistGrouped AS x1 
INNER JOIN (
    SELECT itmID 
     , (
      SELECT avg(Amt) amt 
      FROM tempQORDistGrouped x4 
      WHERE x4.Type = x3.Type 
       AND x4.Brand = x3.Brand 
       AND x4.Brands = x3.Brands 
       AND x4.T2 = x3.T2 
       AND x4.DepBkMo BETWEEN dateadd("m", - 2, x3.DepBkMo) AND x3.DepBkMo 
      ) AS RolAvg 
     , x3.Brand 
     , x3.Brands 
     , x3.DepBkMo 
     , x3.T2 
    FROM tempQORDistGrouped x3 
    ) AS x2 
    ON x1.itmID = x2.itmID 
     AND x1.Brand = x2.Brand 
     AND x1.Brands = x2.Brands 
     AND x1.T2 = x2.T2 
     AND x1.DepBkMo BETWEEN dateadd("m", - 2, x2.DepBkMo) AND x2.DepBkMo  
SET x1.3MonthRollingAmt = x2.RolAvg; 
+0

感謝SoulTrain,這給一去,只好修復它爲一個小的語法錯誤,但現在我得到錯誤「操作必須使用可更新的查詢」從Access時,我嘗試執行。因爲我在更新表格,所以沒有意義。谷歌搜索,找不到任何解決它的工作,所以如果有人有這個想法,這將是偉大的! – gpark

+0

我在sql server env中試過這個,它工作正常,我沒有MS訪問設置來檢查。您可以將查詢更改爲Select並查看它是否在Access中返回正確的結果。 – SoulTrain