2011-05-17 63 views
1

我正在使用自加入來獲取年度至今的總數。這工作:更新具有聚集自加入的查詢

SELECT tc.EmployeeID, tc.TimeCardNum, tc.Tax, SUM(inr.Tax) AS YTDTax 
FROM TimeCards tc 
JOIN (
     SELECT EmployeeID, TimeCardNum, Tax 
     FROM TimeCards 
) AS inr 
ON inr.EmployeeID = tc.EmployeeID 
AND inr.TimeCardNum <= tc.TimeCardNum 
GROUP BY tc.EmployeeID, tc.TimeCardNum, tc.Tax 
ORDER BY tc.EmployeeID, tc.TimeCardNum 

它給了我一個運行總列,重置爲每個員工。

現在我想將它變成一個UPDATE查詢將這些數據放入一個新列。這是如何完成的?

+0

什麼RDBMS和版本? – 2011-05-17 13:33:49

回答

2

您是否嘗試過:在一個事務

UPDATE a 
SET a.YTDTax=b.YTDTax 
FROM TimeCards a 
INNER JOIN (
    SELECT tc.EmployeeID, tc.TimeCardNum, tc.Tax, SUM(inr.Tax) AS YTDTax 
    FROM TimeCards tc 
    JOIN (
      SELECT EmployeeID, TimeCardNum, Tax 
      FROM TimeCards 
    ) AS inr 
    ON inr.EmployeeID = tc.EmployeeID 
    AND inr.TimeCardNum <= tc.TimeCardNum 
    GROUP BY tc.EmployeeID, tc.TimeCardNum, tc.Tax 
) b on a.EmployeeID=b.EmployeeID 
AND a.TimeCardNum = b.TimeCardNum 

運行,以確保它產生所需的輸出。

+1

謝謝,這表明我朝着正確的方向前進。這裏的禮儀是什麼?我是否應該編輯代碼以顯示我曾用於實際使其工作的小修正? – 2011-05-17 13:49:37

+0

是的,請做。 – garnertb 2011-05-17 14:03:45

+0

如果這回答了您的問題,您應該接受答案,以便其他人知道它已關閉。 – garnertb 2011-05-17 15:25:31