日期:2014-05-17  浏览次数:20475 次

求库存帐龄分析的SQL语句,求高手帮助
我有两个表,表一为库存表,表二为交易记录表(收货表,将数量调整成了负数)

我现在想要的结果是:通过这两个表,知道现有的库存量,是哪些库存交易对应的。
比如表1中10100 中的库存1000个,(1000-500-400-400)<=0(第一次小于等于0) 
得到:
itemid 日期         Qty
10100 2013/6/20 -500
10100 2013/5/23 -400
10100 2013/4/20 -100(原来这天是400,但只需要100)


表1中的 10157 中的库存量为:2000(2000-400-600-400-600) 
得到:
itemid 日期         Qty
10157 2013/4/15 -400
10157 2013/3/15 -600
10157 2013/2/15 -400
10157 2013/2/15 -600


表一,和表二都是通过查询后得到如下的结果,记录很多,希望能在性能上做一些考虑。

表一:(4万条记录)
ITEMID On-hand
10100 1000
10157 2000



表二:(500万条记录)
itemid 日期         Qty
10100 2013/6/20 -500
10100 2013/5/23 -400
10100 2013/4/20 -400
10100 2013/4/15 -400

10157 2013/4/15 -400
10157 2013/3/15 -600
10157 2013/2/15 -400
10157 2013/2/15 -600
10157 2013/1/1 -600
SQL 帐龄分析

------解决方案--------------------
估計沒有什麼神語句能做到高效查詢以上結果.

建議再做一表,存放收貨日期,收貨數量,減少時按先進先出的方法扣數.
------解决方案--------------------
CREATE TABLE #items
(
itemid INT,
Onhand INT
)
INSERT #items(itemid, Onhand)
SELECT 10100, 1000 UNION ALL
SELECT 10157, 2000

CREATE TABLE #itemrecord
(
sysid INT IDENTITY NOT NULL,
itemid INT,
thedate DATETIME,
qty INT
)
INSERT #itemrecord(itemid, thedate, qty)
SELECT 10100, '2013/6/20', -500 UNION ALL
SELECT 10100, '2013/5/23', -400 UNION ALL
SELECT 10100, '2013/4/20', -400 UNION ALL
SELECT 10100, '2013/4/15', -400 UNION ALL
SELECT 10157, '2013/4/15', -400 UNION ALL
SELECT 10157, '2013/3/15', -600 UNION ALL
SELECT 10157, '2013/2/15', -400 UNION ALL
SELECT 10157, '2013/2/15', -600 UNION ALL
SELECT 10157, '2013/1/1', -600

--SQL