博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算结余数
阅读量:6941 次
发布时间:2019-06-27

本文共 1645 字,大约阅读时间需要 5 分钟。

有一个网友问及,在SQL中,计算每一笔的结余数。他提供的截图说明:

 

 

实现这个功能,关键是获取前一笔记录eqty字段的值。

下面Insus.NET尝试写一下。使用最简单的方法,就是循环每一笔记录。然后可以计算 qty加上前一笔的eqty。

创建一个临时表存储原数:

CREATE TABLE #tt(  [empid] char(3),  [fdate] date,  [qty] int)INSERT INTO #tt([empid],[fdate],[qty]) VALUES('100','2018-01-01',100)INSERT INTO #tt([empid],[fdate],[qty]) VALUES('100','2018-01-01',100)INSERT INTO #tt([empid],[fdate],[qty]) VALUES('100','2018-01-01',120)INSERT INTO #tt([empid],[fdate],[qty]) VALUES('100','2018-01-01',145)INSERT INTO #tt([empid],[fdate],[qty]) VALUES('100','2018-01-02',30)INSERT INTO #tt([empid],[fdate],[qty]) VALUES('100','2018-01-02',150)INSERT INTO #tt([empid],[fdate],[qty]) VALUES('100','2018-01-02',160)INSERT INTO #tt([empid],[fdate],[qty]) VALUES('100','2018-01-02',170)INSERT INTO #tt([empid],[fdate],[qty]) VALUES('100','2018-01-02',121)INSERT INTO #tt([empid],[fdate],[qty]) VALUES('100','2018-01-02',106)
Source Code

 

我们开始处理,创建另外一个临时表,原始表相似,不过需要添加2个字段,id和eqty。其中id是自然增长的identity(1,1)。

还需要把原始数据搬到此新建的临时表中:

 

CREATE TABLE #ttt(    [id] int identity(1,1),    [empid] char(3),    [fdate] date,    [qty] int,     [eqty] int)INSERT INTO #ttt([empid],[fdate],[qty]) SELECT  [empid],[fdate],[qty]  FROM #tt
Source Code

 

接下来,Insus.NET写了一个存储过程,方法如下:

 

DECLARE @r int = 1,@rs INT = 0SELECT @rs = MAX([empid]) FROM #tttWHILE @r <= @rs BEGIN        IF (@r = 1 )        UPDATE #ttt SET [eqty] = [qty] WHERE [id] = @r --处理第一笔记录    ELSE    BEGIN        DECLARE @eqty INT         SELECT @eqty = [eqty] FROM #ttt WHERE [id] = @r - 1  --获取前一笔的结余数                UPDATE #ttt SET [eqty] = [qty] + @eqty  WHERE [id] = @r  --计算后更新当前记录的eqty字段值。    END        SET @r = @r+ 1ENDGO
Source Code

 

处理结果:

 

转载地址:http://liinl.baihongyu.com/

你可能感兴趣的文章
8127 timeout!!! 搞死人啊
查看>>
Android开发 设置开机自动启动
查看>>
高德地图iOS SDK限制地图的缩放比例
查看>>
【组件化开发】前端进阶篇之如何编写可维护可升级的代码
查看>>
Node.js node主文件找不到时报出的Error:Cannot find module异常
查看>>
让SQL Server Compact支持 Membership, Role and Profile provider
查看>>
一个编译器的实现2——从文法到LL(1)分析表的概念和算法
查看>>
报表系统结构优化之中间数据外置
查看>>
《JAVA与模式》之门面模式
查看>>
vim/vi的文件内、跨文件复制粘贴操作、替换操作
查看>>
java命令执行jar文件
查看>>
python get class base name
查看>>
论这场云盘大战,以及各网盘的优劣
查看>>
怪异的JavaScript系列(三)
查看>>
辅助模式最终考验的是想象力,先来看看怎么用!| Accessibility
查看>>
TiDB 源码阅读系列文章(九) Hash Join
查看>>
【个人向整理】Promise
查看>>
用 Algolia DocSearch 轻松实现文档全站搜索
查看>>
Kibana 用户指南(安装Kibana)
查看>>
阿里CEO张勇:我们理解AI是Alibaba Intelligence
查看>>