2011-05-17 37 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