Sql server 2008 sql基于上一个int列更新int列

Sql server 2008 sql基于上一个int列更新int列,sql-server-2008,Sql Server 2008,我有一个基本的表FoodSales,其中有3列SaleForDay decimal 10,2,SalesToDate decimal 10,2,ItemOrder Int 数据是这样的 SaleForDay|SalesToDate|ItemOrder 4.99|4.99|1 12.99||2 14.99||3 5.99||4 我正在努力得到结果 SaleForDay|SalesToDate|ItemOrder 4.99|4.99|1 12.99|17.98|2 14.99|32.97|3

我有一个基本的表FoodSales,其中有3列SaleForDay decimal 10,2,SalesToDate decimal 10,2,ItemOrder Int

数据是这样的

SaleForDay|SalesToDate|ItemOrder 4.99|4.99|1 12.99||2 14.99||3 5.99||4 我正在努力得到结果

SaleForDay|SalesToDate|ItemOrder 4.99|4.99|1 12.99|17.98|2 14.99|32.97|3 5.99|38.96|4 这里的方法是SalesToDate=上一个itemorder SalesToDate+当前Saleforde值

来帮忙

CREATE TABLE #FruitSales ( SaleForDay DECIMAL (10, 2), SalesToDate DECIMAL (10, 2), ItemOrder INT ); INSERT INTO #FruitSales (SaleForDay, SalesToDate, ItemOrder) VALUES ('4.99', '4.99', '1'), ('12.99', NULL, '2'), ('14.99', NULL, '3'), ('5.99', NULL, '4'); SELECT * FROM #FruitSales; DROP TABLE #FruitSales; 谢谢你的帮助,我意识到这很简单。

试试这个:

;WITH CumulativeData AS
(
SELECT b.ItemOrder, SUM(a.SaleForDay) AS TotalSales
  FROM #FruitSales a INNER JOIN #FruitSales b
    ON a.ItemOrder <= b.ItemOrder
 GROUP BY  b.ItemOrder
)
UPDATE a
SET a.SalesToDate =  TotalSales 
  FROM #FruitSales a INNER JOIN CumulativeData  b
    ON a.ItemOrder = b.ItemOrder;
另一种选择:

UPDATE a
SET SalesToDate = TotalSales 
  FROM #FruitSales a CROSS APPLY 
       (SELECT SUM(SaleForDay) TotalSales FROM #FruitSales b WHERE b.ItemOrder <= a.ItemOrder) b

Chandu-很漂亮,但我认为粉色让它变得很简单
CREATE TABLE #FruitSales
(
   SaleForDay    DECIMAL (10, 2),
   SalesToDate   DECIMAL (10, 2),
   ItemOrder     INT
);

INSERT INTO #FruitSales (SaleForDay, SalesToDate, ItemOrder)
VALUES ('4.99', '4.99', '1'),
       ('12.99', NULL, '2'),
       ('14.99', NULL, '3'),
       ('5.99', NULL, '4');

update f
SET SalesToDate = (select sum(saleforday) from #FruitSales ff where ff.itemorder <= f.itemorder)
from #FruitSales f

SELECT * FROM #FruitSales;