不用循环游标,一句update代码实现滚动计算[通俗易懂]

不用循环游标,一句update代码实现滚动计算[通俗易懂]发现一段经典SQL,不用循环游标,一句update代码实现滚动计算结存。为方便理解,结合实例测试之 –1,源数据#t1,jcshl初值为每个sid的当前库存数量,要实现的效果:每个sid的后一结存数

不用循环游标,一句update代码实现滚动计算

发现一段经典SQL,不用循环游标,一句update代码实现滚动计算结存。为方便理解,结合实例测试之

--1,源数据#t1,jcshl初值为每个sid的当前库存数量,要实现的效果:每个sid的后一结存数量为前一jcshl结存数量-chkshl出库数量
SELECT * FROM #t1 ORDER BY sn

代码100分

sn plh sid chkshl jcshl
1 S0002 20.0000 980.0000
2 S0003 10.0000 1010.0000
3 S0003 10.0000 1010.0000
4 S0003 10.0000 1010.0000
5 S0002 10.0000 980.0000
6 S0002 1.0000 980.0000
7 S0004 20.0000 720.0000
8 S0005 10.0000 530.0000
9 S0005 10.0000 530.0000
10 S0005 10.0000 530.0000
11 S0004 10.0000 720.0000
12 S0004 1.0000 720.0000

代码100分--2,按sid排序#t2,数据顺序决定分组及计算顺序
SELECT * INTO #t2 FROM #t1 ORDER BY sid,sn

sn plh sid chkshl jcshl
1 S0002 20.0000 980.0000
5 S0002 10.0000 980.0000
6 S0002 1.0000 980.0000
2 S0003 10.0000 1010.0000
3 S0003 10.0000 1010.0000
4 S0003 10.0000 1010.0000
7 S0004 20.0000 720.0000
11 S0004 10.0000 720.0000
12 S0004 1.0000 720.0000
8 S0005 10.0000 530.0000
9 S0005 10.0000 530.0000
10 S0005 10.0000 530.0000

--3,滚动更新jcshl结存数量,同时填入新的plh排列号
DECLARE @plh CHAR(11),@jcshl DECIMAL(18,4),@sid CHAR(11)

UPDATE #t2 SET 
    @jcshl=jcshl=CASE WHEN sid=@sid THEN @jcshl-chkshl ELSE jcshl-chkshl END,
    @plh=plh=STR(ISNULL(@plh,0))+1,
    @sid=sid=sid

SELECT * FROM #t2

sn plh sid chkshl jcshl
1 1 S0002 20.0000 960.0000
5 2 S0002 10.0000 950.0000
6 3 S0002 1.0000 949.0000
2 4 S0003 10.0000 1000.0000
3 5 S0003 10.0000 990.0000
4 6 S0003 10.0000 980.0000
7 7 S0004 20.0000 700.0000
11 8 S0004 10.0000 690.0000
12 9 S0004 1.0000 689.0000
8 10 S0005 10.0000 520.0000
9 11 S0005 10.0000 510.0000
10 12 S0005 10.0000 500.0000

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10209.html

(0)
上一篇 2023-01-23 14:30
下一篇 2023-01-23

相关推荐

  • mysql主从搭建「终于解决」

    mysql主从搭建「终于解决」mysql主从搭建 环境:ubuntu20.04.1,mysql:8.0.22。 主:192.168.87.3 备:192.168.87.6 安装数据库 sudo apt-get install my

    2023-06-08
    141
  • mongodb运算符_mongodb authentication failed

    mongodb运算符_mongodb authentication failed问题 如果MongoDB 数据库集合中仅存在一条记录 我们执行查询 此时会得到结果吗? 最开始我想当然的以为是不会出现结果的,但结果往往与期望背道而驰。 什么,一瞬间我陷入了迷茫,Mongo的查询结果

    2023-02-11
    151
  • MySQL优化–MVCC

    MySQL优化–MVCCMySQL优化–概述以及索引优化分析 MySQL优化–查询分析工具以及各种锁 七、MVCC 7.1、必备知识 7.1.1、什么是MVCC 多版本并发控制(Multiversion concurr…

    2023-03-31
    169
  • windows10安装oracle数据库_win10更新数据库错误

    windows10安装oracle数据库_win10更新数据库错误一、下载Oracle 11g R2 for Windows。 官方网站: 二、解压两个压缩包到同一个目录下,即‘database’,然后点击‘setup.exe’文件开始安装。 三、执行安装程序后,选

    2022-12-30
    142
  • Python中的含义

    Python中的含义Python是一种高级、互动式、面向对象的编程语言,具有简洁易读的语法和强大的内置函数。它由Guido van Rossum于1989年创造,主要是为了提高程序员的工作效率。

    2024-06-06
    63
  • Python在QNX与Linux上的差异及使用场景对比

    Python在QNX与Linux上的差异及使用场景对比在QNX系统上,Python的默认版本是2.7。不同于在Linux系统上,用户需要手动安装Python。同时,由于QNX系统基于实时操作系统,因此需要对Python的编译选项进行特别的设置。

    2024-01-02
    112
  • [20191218]降序索引疑问4.txt

    [20191218]降序索引疑问4.txt[20191218]降序索引疑问4.txt–//前几天优化一个项目,我发现许多表里面有有隐含字段,一般开发很少建立函数索引.我自己检查发现里面存在大量的降序索引.–//我感觉有点奇怪,为什么开发要

    2022-12-27
    150
  • HBase原理 | HBase Region 运行状态学习[亲测有效]

    HBase原理 | HBase Region 运行状态学习[亲测有效]HBase为每个Region维护一个状态,并将该状态保留在hbase:meta中。hbase:meta 本身的Region状态保留在ZooKeeper中。可以在Master Web UI中查看Regi

    2023-03-04
    162

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注