求助一个关于累减的问题

fglterry 2015-05-15 03:52:56
原表
订单 物料 当前库存数量 未发货数量
150105 A 1000 800
150107 B 2000 600
150120 A 1000 300
150225 B 2000 200
150301 B 2000 1000
A物料的库存是1000,150105订单A未发货数量800,那么150120订单A的可用库存1000-800(订单150105)=200
B物料的库存是2000,150107订单未发货数量600,那么150225订单可以库存2000-600=1400,到150301订单时可用库存
2000-600-200 = 1200

怎么把表更新存货数量变为
订单 物料 当前可用库存数量 未发货数量
150105 A 1000 800
150107 B 2000 600
150120 A 200 300
150225 B 1400 200
150301 B 1200 1000

这个累减如何写?
...全文
204 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
HelloWordGirl 2015-05-18
  • 打赏
  • 举报
回复
;WITH cet AS ( SELECT '150105' AS ID,'A' AS TYPE,1000 AS QTY,800 AS PQTY UNION ALL SELECT '150107','B',2000,600 UNION ALL SELECT '150120','A',1000,300 UNION ALL SELECT '150225','B',2000,200 UNION all SELECT '150301',' B ',2000,1000 ) SELECT c1.ID,c1.TYPE,c1.QTY-isnull(sum(c2.PQTY),0) AS QTY,c1.PQTY FROM cet c1 LEFT JOIN cet c2 ON c1.TYPE=c2.TYPE AND c1.ID>c2.ID GROUP BY c1.ID,c1.TYPE,c1.QTY,c1.PQTY
还在加载中灬 2015-05-15
  • 打赏
  • 举报
回复
;WITH CTE AS(
	SELECT 订单,物料,当前库存数量,未发货数量
		,ROW_NUMBER()OVER(PARTITION BY 物料 ORDER BY 订单)RN
	FROM TB
)
,CTE2 AS(
	SELECT 订单,物料,未发货数量,RN
		,当前库存数量 BALANCE
	FROM CTE WHERE RN=1
	UNION ALL
	SELECT T1.订单,T1.物料,T1.未发货数量,T1.RN
		,T2.BALANCE-T2.未发货数量
	FROM CTE T1
		JOIN CTE2 T2 ON T1.物料=T2.物料 AND T1.RN=T2.RN+1
)
SELECT 订单,物料,BALANCE 当前库存数量,未发货数量 FROM CTE2
--sql2005+
还在加载中灬 2015-05-15
  • 打赏
  • 举报
回复
SELECT T1.订单,T1.物料,T1.当前库存数量-ISNULL(SUM(T2.未发货数量),0)[当前库存数量],T1.未发货数量
FROM TB T1
	LEFT JOIN TB T2 ON T1.物料=T2.物料 AND T1.订单>T2.订单
GROUP BY T1.订单,T1.物料,T1.当前库存数量,T1.未发货数量
--兼容SQL2000的方法

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧