sqlserver 今天收到一个奇怪的需求 想大家提供我点思路

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

【ORACLE】谈一谈分析函数(窗口函数)的前世今生-那些可能不为人知的事_DarkAthena的博客-CSDN博客 一、前言经常写报表sql的小伙伴,应该都知道"分析函数"这一强大的功能,常见用法比如 取分组TOP-N、滚动求和、取当前行的上(下)N行等等。不过本篇不会再对这些常见基础用法进行介绍,只会说说那些关于"分析函数"可能不被人注意的事。二、最早使用分析函数的数据库有文章里说过,分析函数最早是在ORACLE8.1.6中出现的,我翻了下8.1.6和8.0的文档,发现的确如此(8.1.5版本文档已被移除,暂无法确认)而ORACLE8.1.6是在1999年11月发布的,因此早在二十多年前(此文创作日期为2022 https://darkathena.blog.csdn.net/article/details/123701128?spm=1001.2014.3001.5502

sqlserver2008还不支持开窗函数中用order by,至少要到sqlserver2012.
所以你这个问题只能用循环去解决了

你要是还是用的2008R2,那只能用子查询了,2008还不支持SUM的开窗函数,只有row_number这几个分组排序的。