博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sql 先进先出计算积分
阅读量:7014 次
发布时间:2019-06-28

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

先建表,插入测试数据

--正积分表CREATE table tb1 (    [memberId] [nvarchar](50) NOT NULL,    [pointProduceTime] [nvarchar](50) NOT NULL,    [type] [nvarchar](50) NULL,    [point] [int] NULL)INSERT INTO tb1 VALUES ('1007307','2017-02-06 00:00:00','1',360)INSERT INTO tb1 VALUES ('1007307','2017-03-17 00:00:00','1',930)INSERT INTO tb1 VALUES ('1007307','2017-03-19 00:00:00','2',890)INSERT INTO tb1 VALUES ('1007307','2017-06-09 21:52:14','1',700)INSERT INTO tb1 VALUES ('1007307','2017-08-28 22:26:12','1',1090)INSERT INTO tb1 VALUES ('1007307','2017-10-23 21:16:29','1',1330)--负积分表CREATE table tb2(    [memberId] [nvarchar](50) NOT NULL,    [pointProduceTime] [nvarchar](50) NOT NULL,    [type] [nvarchar](50) NULL,    [point] [int] NULL)INSERT INTO tb2 VALUES ('1007307','2017-09-23 21:04:50','1',-1090)INSERT INTO tb2 VALUES ('1007307','2017-11-10 12:56:21','5',-2500)

表tb1:

表tb2:

在不知道每次需要扣减多少积分的情况下,需使用游标遍历数据

--正积分SELECT IDENTITY(INT,1,1) as id,memberId,pointProduceTime,type,point,point as lesspointINTO #tb1FROM tb1--负积分SELECT IDENTITY(INT,1,1) as id,memberId,pointProduceTime,type,pointINTO #tb2FROM tb2declare @inid intdeclare @innum intdeclare @indate datedeclare @outid intdeclare @outnum intdeclare @outdate dateDECLARE @lessnum int--负积分游标declare xrxc_cursorf cursor for select id,pointProduceTime,point from #tb2 order by pointProduceTimeopen xrxc_cursorf fetch next from xrxc_cursorf into @outid,@outdate,@outnum --遍历每行数据WHILE @@FETCH_STATUS=0BEGIN     --正积分游标    declare xrxc_cursorz cursor     for     select id,pointProduceTime,point,lesspoint from #tb1 where lesspoint>0 order by pointProduceTime    open xrxc_cursorz     fetch next from xrxc_cursorz into @inid,@indate,@innum,@lessnum --遍历每行数据    WHILE @@FETCH_STATUS=0    BEGIN        --方法参考一        IF @outnum<=0            begin                IF @innum >= @outnum*-1                    begin                        update #tb1 SET lesspoint=@outnum+@innum where id=@inid                    end                else                    begin                        update #tb1 SET lesspoint=0 where id=@inid                    end                                    SET @outnum = @outnum+@lessnum                end        else            update #tb1 SET lesspoint=@lessnum where id=@inid        fetch next from xrxc_cursorz into @inid,@indate,@innum,@lessnum        /*    --方法参考二        set @outnum=@outnum+@lessnum        IF @outnum<=0            begin                update #tb1 SET lesspoint=0 where id=@inid            end        else            begin                IF @outnum<@innum                BEGIN                    update #tb1 SET lesspoint=@outnum where id=@inid                end            end        fetch next from xrxc_cursorz into @inid,@indate,@innum,@lessnum    */    END    close xrxc_cursorz    deallocate xrxc_cursorz    fetch next from xrxc_cursorf into @outid,@outdate,@outnumENDclose xrxc_cursorfdeallocate xrxc_cursorfselect * from #tb1select * from #tb2 DROP TABLE #tb1DROP TABLE #tb2

 结果表:

 

转载于:https://www.cnblogs.com/hbwy/p/8303292.html

你可能感兴趣的文章
[Typescript] Typescript Enums vs Booleans when Handling State
查看>>
Java中HashMap源码分析
查看>>
(转)c#.net常用字符串函数
查看>>
Xamarin提示Build-tools版本过老
查看>>
[linux]scp指令
查看>>
自从升级到macOS后,整个人都不好了
查看>>
border-style 属性
查看>>
拒绝旧国标劣质排插,新国标插线板首选品胜
查看>>
新疆国省干线总里程突破2.9万公里
查看>>
国产智轨电车开进“冰城”接受严寒测试 表现良好
查看>>
面试官,你再问我 Bit Operation 试试?
查看>>
PSV 3.60 固化升级到 3.68 破解完全攻略
查看>>
【实操干货】KVM命令管理虚拟机与性能优化
查看>>
Android NDK JNI 开发之旅01 环境搭建入门篇
查看>>
Flutter花式玩转TextField,写一个验证码输入框超简单!
查看>>
RxJava应用:实现七牛云多图上传
查看>>
Android爬坑之旅之不易发现的BUG
查看>>
koa2开发微信公众号: 不定期推送最新币圈消息
查看>>
小tips:JS中this操作执行像(object.getName = object.getName)()操作改变了this
查看>>
为什么国外的 App 很少会有开屏广告?
查看>>