0

基本的なテーブルFoodSalesがあり、SaleForDay 10進数(10,2)、SalesToDate 10進数(10,2)、ItemOrderIntの3つの列があります。

データはそうです

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=前のitemorderSalesToDate+現在のSaleforDay値です。

助けるために。

CREATE TABLE #FruitSales
((
   SaleForDay 10進数(10、2)、
   SalesToDate 10進数(10、2)、
   ItemOrder INT
);

INSERT INTO #FruitSales(SaleForDay、SalesToDate、ItemOrder)
値( '4.99'、 '4.99'、 '1')、
       ('12 .99'、NULL、' 2')、
       ('14.99'、NULL、 '3')、
       ('5.99'、NULL、 '4');

SELECT * FROM #FruitSales;

ドロップテーブル#FruitSales;

助けてくれてありがとう、私はこれがおそらくパイのように単純であることを理解しています。

4

2 に答える 2

0

これを試して:

;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
于 2012-11-13T02:36:10.633 に答える
0
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;
于 2012-11-13T02:37:16.677 に答える