2013-07-31 12 views
9

Tôi có một bảng (SQL Server 2005) của định dạng này:SQL Server tích lũy Sum do Tập đoàn

dummy_id, date_registered, item_id, số lượng, giá

và tôi muốn thêm một cột mới (tích lũy) mà tính toán tổng số tích lũy của mỗi đơn đặt item_id bởi date_registered như:

dummy_id date_registered item_id quantity price cumulative 

1   2013-07-01  100  10  34.5  10 

2   2013-07-01  145  8  2.3   8 

3   2013-07-11  100  20  34.5  30 

4   2013-07-23  100  15  34.5  45 

5   2013-07-24  145  10  34.5  18 

Thanx trước

Trả lời

17

Trong SQL Server 2005, tôi sẽ làm điều này bằng một subquery tương quan:

select dummy_id, date_registered, item_id, quantity, price, 
     (select sum(quantity) 
     from t t2 
     where t2.item_id = t.item_id and 
       t2.date_registered <= t.date_registered 
     ) as cumulative 
from table t; 

Nếu bạn thực sự muốn để thêm video này vào một bảng, bạn cần phải thay đổi bảng để thêm cột và sau đó làm một cập nhật . Nếu bảng có chèn và cập nhật, bạn sẽ cần phải thêm trình kích hoạt để luôn cập nhật. Bắt nó thông qua một truy vấn chắc chắn là dễ dàng hơn.

Trong SQL Server 2012, bạn có thể làm điều này bằng cách sử dụng cú pháp:

select dummy_id, date_registered, item_id, quantity, price, 
     sum(quantity) over (partition by item_id order by date_registered) as cumulative 
from table t;