sqlserver 今天收到一个奇怪的需求 想大家提供我点思路
简单举个例子 有个数据表table1
有三列数据
产品名称 CPName 产品编码CPNum 变动数量Qty 变动时间DocDate
CPName CPNum Qty DocDate
胶带 JD001 50 2022-4-18
胶带 JD001 -7 2022-4-19
胶带 JD001 -10 2022-4-20
纸箱 ZX001 20 2022-4-17
纸箱 ZX001 -10 2022-4-18
现在是想要实现这样一个效果:
CPName CPNum Qty DocDate JCSL
胶带 JD001 50 2022-4-18 50
胶带 JD001 -7 2022-4-19 43
胶带 JD001 -10 2022-4-20 33
纸箱 ZX001 20 2022-4-17 20
纸箱 ZX001 -10 2022-4-18 10
就是新查出来一列:结存数量
就是相同的产品 相同编码的情况下 在一段时间内 结存数量的变动情况
希望各位老大哥们提供一点思路 现在真的是焦头烂额了 QAQ--
使用开窗函数的滑动窗口即可
select t.*,
sum(Qty) over(partition by CPNum order by DocDate) JCSL
from table1 t
sqlserver2008还不支持开窗函数中用order by,至少要到sqlserver2012.
所以你这个问题只能用循环去解决了
你要是还是用的2008R2,那只能用子查询了,2008还不支持SUM的开窗函数,只有row_number这几个分组排序的。