我有一个表T1,结构与数量如下:
日期 入库数量 出库数量
2014-01-02 500 0
2014-01-02 300
2014-01-02 500 0
2014-01-02 500
2014-01-02 800 0
2014-01-02 250 245
我想要的结果是增加多一列库存余额,该列计算公式:上一行余额+当前行入库-当前行出库
效果如下:
日期 入库数量 出库数量 库存余额
2014-01-02 500 0 500
2014-01-02 300 200
2014-01-02 500 0 700
2014-01-02 500 200
2014-01-02 800 0 1000
2014-01-02 250 245 1005
------解决思路----------------------
;WITH T1CTE AS(上面搞错了一个字段~~已修改
SELECT ROW_NUMBER()OVER(ORDER BY GETDATE())RN,*FROM T1
)
,CTE AS(
SELECT RN,[日期],[入库数量],[出库数量],[入库数量]-[出库数量] [库存余额] FROM T1CTE WHERE RN=1
UNION ALL
SELECT A.RN,A.[日期],A.[入库数量],A.[出库数量],A.[入库数量]-A.[出库数量]+B.[库存余额] FROM T1CTE A JOIN CTE B ON A.RN=B.RN+1
)
SELECT * FROM CTE
------解决思路----------------------
先執行你得到源數據的查詢,看耗時多長。
可能那一部分應該是你要優化的部分。
------解决思路----------------------
让递归CTE只保留 rn 和 库存余额,要出结果时再和其他字段拼起来。
我这里做模拟递归1000次结果是秒出的。
WITH test AS (
SELECT 1 RN,
Convert(decimal(18,2),RAND()*1000) AS InStore,
Convert(decimal(18,2),RAND()*1000) AS OutStore
UNION ALL
SELECT RN+1,
Convert(decimal(18,2),RAND(RN*OutStore)*1000) AS InStore,
Convert(decimal(18,2),RAND(RN+InStore)*1000) AS OutStore
FROM test
WHERE RN < 1000
)
,CTE AS (
SELECT RN,