zoukankan      html  css  js  c++  java
  • 数据库中根据仓库数量拆分单据--通过游标实现

    declare @yssl int --用来存储需要拆分的原始数
    declare @name varchar(50) --原始表中的名称
    declare m_canku cursor scroll for --定义一个原始数据游标
    select name,sl from tbl_test --原始表数据
    open m_canku --打开原始数据游标
    fetch next from m_canku into @name,@yssl --循环游标
    while @@FETCH_STATUS=0
    begin
    print @yssl
    delete tbl_Temp --循环之前先清空临时表
    /**** begin 将符合原始数据当前行中数据量的仓库过滤出来放到临时表中 *******/
    insert into tbl_Temp(hz, sl,ckid) select hz,sl,id from (select a.id,a.hz,a.sl,(select sum(b.sl) as qqq from tbl_canku b where a.id>=b.id) as sumqty
    from tbl_canku a) a
    where id <= (select top 1 id from (select a.id,a.hz,a.sl,(select sum(b.sl) as qqq from tbl_canku b where a.id>=b.id) as sumqty from tbl_canku a
    ) a where a.sumqty>=@yssl)
    order by a.id
    /**** end ********/

    declare m_cursor cursor scroll for --定义一个仓库子游标
    select hz,sl,ckid from tbl_Temp --将过滤的数据放到仓库游标中

    open m_cursor --打开子游标
    declare @hz varchar(50), @sl int, @ckid int
    fetch next from m_cursor into @hz,@sl,@ckid --开始循环子游标
    while @@FETCH_STATUS=0
    begin
    declare @tempint int
    if(@yssl>@sl)--如果原始数据中的数量大于仓库第一行的数量,则生成一条数据放到中间表中再运算后继续拆分
    begin
    if(@sl>0)
    begin
    insert into tbl_wuliao(name,hz,sl)values(@name,@hz,@sl) --将数据放到中间表中
    set @yssl=@yssl-@sl;--由于原始数据中的数量比当前仓库的数据大所以需要运算后继续拆分第二条数据插入
    update tbl_canku set sl=0 where id=@ckid --更新仓库数量
    print '1'
    end
    end
    else if(@yssl=@sl) --如果原始数据中的数量与当前仓库的数量先等则直接插入一条数据到中间表
    begin
    if(@sl>0) --过滤掉数量为0的数据
    begin
    insert into tbl_wuliao(name,hz,sl)values(@name,@hz,@sl)
    --set @a=@a-@sl;
    update tbl_canku set sl=0 where id=@ckid --更新仓库数量
    print '1'
    break
    end
    end
    else --如果原始数据中的数量小于仓库第一行的数量,则直接拆分成一条数据放到中间表中再更新仓库数量
    begin
    if(@yssl>0)
    begin
    insert into tbl_wuliao(name,hz,sl)values(@name,@hz,@yssl)
    update tbl_canku set sl=sl-@yssl where id=@ckid
    print '2'
    break
    end
    end
    fetch next from m_cursor into @hz,@sl,@ckid
    end
    close m_cursor --关闭仓库子游标
    deallocate m_cursor --关闭仓库子游标
    fetch next from m_canku into @name,@yssl
    end
    close m_canku --关闭原始数据主游标
    deallocate m_canku --关闭原始数据主游标

  • 相关阅读:
    单机安装nginx
    单机安装hdfs
    单机安装postgresql
    cookie和session
    zookeeper的学习笔记
    java的反射和代理
    spring boot配置404 和 500错误页面跳转
    react + ant Upload前端解析excel文件后时间解析为数字转化回日期格式
    Chrome浏览器手动添加Cookie
    实现table列拖拽插件(colResizable)
  • 原文地址:https://www.cnblogs.com/hn_lijia/p/11117759.html
Copyright © 2011-2022 走看看