zoukankan      html  css  js  c++  java
  • 同一张表内、利用变化的上一行数据动态地修改下一行数据(示例Demo)

     --同一张表内、利用变化的上一行数据动态地修改下一行数据(示例Demo)

    /*
    CREATE TABLE Account (        
        [Month] [datetime] NOT NULL Prmary Key,
        [PlanFare] [money] NULL ,
        [PutoutFare] [money] NULL ,
        [PlanPreFare] [money] NULL ,
        [PutoutPreFare] [money] NULL 
    )  --Account表生成脚本
    */


    select identity(int,1,1as [id],* into # from account order by [month] asc

    CREATE TABLE #Temp (
            
    [id] [int]  NOT NULL,
        
    [Month] [datetime] NOT NULL ,
        
    [PlanFare] [money] NULL ,
        
    [PutoutFare] [money] NULL ,
        
    [PlanPreFare] [money] NULL ,
        
    [PutoutPreFare] [money] NULL 
    )

    declare @id int
    declare m cursor for select [id] from # order by [id] asc
    open m
    fetch next from m into @id
    while (@@fetch_status=0)
    begin
      
    insert into #Temp([id],[Month], PlanFare, PutoutFare, PlanPreFare, PutoutPreFare)
      
    select [id],[Month], PlanFare, PutoutFare, PlanPreFare, PutoutPreFare from # where [id]=@id

      
    UPDATE #
      
    SET #.PlanPreFare = (a.PlanFare - a.putoutFare) + (a.PlanPreFare - a.putoutPreFare)
      
    FROM #Temp AS a
      
    WHERE #.[id] = a.[id]+1
      
    --前行作依据,后行来修改(此次的后行,变成下次的前行,依此循环,直至表中的行遍历结束)
      truncate table #Temp  
      
    fetch next from m into @id
    end
    close m
    deallocate m


    UPDATE Account
    SET Account.PlanPreFare = a.PlanPreFare
    FROM # AS a
    WHERE Account.[Month] = a.[Month]


    drop table # 
    drop table #Temp
     

     
  • 相关阅读:
    龟兔赛跑(多线程练习题)
    进程和线程详解
    toString()方法详解
    使用IDEA的Git插件上传项目教程
    js运算符单竖杠“|”的用法和作用及js数据处理
    vue项目axios请求接口,后端代理请求接口404,问题出现在哪?
    jQuery的ajax的post请求json格式无法上传空数组
    es6 学习小记 扩展运算符 三个点(...)
    select2插件使用小记2
    js中多维数组转一维
  • 原文地址:https://www.cnblogs.com/cyz1980/p/918477.html
Copyright © 2011-2022 走看看