假設有如下所示的資料表,要如何透過 T-SQL 指令計算出數量的累積值(就是最下面那個表格中,
「累計庫存」黃色的欄位)?
日期 | 類別 | 單號 | 入庫數量 | 出庫數量 |
2009/01/20 | 進貨 | D001 | 300 | 0 |
2009/01/20 | 進貨 | D002 | 600 | 0 |
2009/01/21 | 銷貨 | D003 | 0 | -300 |
2009/01/21 | 銷貨 | D004 | 0 | -600 |
2009/02/02 | 進貨 | D005 | 300 | 0 |
2009/02/02 | 進貨 | D006 | 2400 | 0 |
2009/02/03 | 銷貨 | D007 | 0 | -300 |
2009/02/03 | 銷貨 | D008 | 0 | -2400 |
2009/02/25 | 進貨 | D009 | 900 | 0 |
2009/02/26 | 進貨 | D010 | 600 | 0 |
2009/02/27 | 銷貨 | D011 | 0 | -900 |
2009/02/27 | 銷貨 | D012 | 0 | -600 |
日期 | 類別 | 單號 | 入庫數量 | 出庫數量 | 累計庫存 |
2009/01/20 | 進貨 | D001 | 300 | 0 | 300 |
2009/01/20 | 進貨 | D002 | 600 | 0 | 900 |
2009/01/21 | 銷貨 | D003 | 0 | -300 | 600 |
2009/01/21 | 銷貨 | D004 | 0 | -600 | 0 |
2009/02/02 | 進貨 | D005 | 300 | 0 | 300 |
2009/02/02 | 進貨 | D006 | 2400 | 0 | 2700 |
2009/02/03 | 銷貨 | D007 | 0 | -300 | 2400 |
2009/02/03 | 銷貨 | D008 | 0 | -2400 | 0 |
2009/02/25 | 進貨 | D009 | 900 | 0 | 900 |
2009/02/26 | 進貨 | D010 | 600 | 0 | 1500 |
2009/02/27 | 銷貨 | D011 | 0 | -900 | 600 |
2009/02/27 | 銷貨 | D012 | 0 | -600 | 0 |
由於這個資料表有個欄位「單號」是獨一的(Unique),且後一個單號的值會比前一個單號的值還大,因此透過這個欄位,我們可以使用下面的 T-SQL 指令動態計算出「累計庫存」的數值:
SELECT 日期, 類別, 單號, 入庫數量, 出庫數量,
(SELECT SUM(入庫數量 + 出庫數量) FROM ALEX AS ONE
WHERE TWO.單號 >= ONE.單號) AS 累計庫存
FROM ALEX AS TWO