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

原创 2007年10月09日 18:50:00
  --同一张表内、利用变化的上一行数据动态地修改下一行数据(示例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
 

 

同一张表中复制一条数据

INSERT INTO     pt_puzzle(`puzzle_pid`,`title`,`img`,`release_id`,`author_id`,`release_time`,`autho...
  • Two_steps
  • Two_steps
  • 2018-03-20 18:36:25
  • 111

Datatable修改其中数据或添加行添加列

Datatable dt=假设你已经执行完你的sql语句 首先       你要克隆一个新dadtatable因为你想要改变其中的值假如有一个字段是整形,你需要改变其中的值改成长整形。那么你必须要克隆...
  • hello_mr_anan
  • hello_mr_anan
  • 2016-10-13 08:39:00
  • 1958

Oracle查询当前某条数据的前一行数据与后一行数据

oracle可以使用 lead、lag  函数来查询已有记录的下一条、上一条记录。 表结构如下:...
  • jumtre
  • jumtre
  • 2014-07-24 21:27:14
  • 6422

mysql表内复制行数据

mysql> insert into auth_user select id+1 , concat(username, '1') , first_name , last_name , email ,...
  • xiaogazhang
  • xiaogazhang
  • 2015-07-30 09:28:05
  • 697

sql 多行数据一行显示

  • 2011年05月15日 12:00
  • 600B
  • 下载

kettle中访问前一行数据

kettle 进阶教程 权威示例 快速学习
  • neweastsun
  • neweastsun
  • 2014-09-05 07:53:22
  • 2235

sqlserver用当前行减去前一行的数据的简单处理方法 -- 不使用循环

;with cet -- 1.递归取出需要的数据 as  ( -- 对于CET通用表达式增加自定义列的问题?-- 附带说明 -- 自定义列必须满足下面二者中的一种,否则报错:[在递归查询 ...
  • linybo
  • linybo
  • 2015-07-28 10:33:04
  • 1888

mysql触发器在一个表上插入的同时修改本表的数据

DELIMITER $$ USE `cric_crm`$$ DROP TRIGGER /*!50032 IF EXISTS */ `insert_on_t_report_pdeta...
  • u011156212
  • u011156212
  • 2013-11-04 19:09:51
  • 1955

同一个事务内修改两次,第二次改回原状会不会产生binlog,改前改后相同会不会产生binlog

实验一 1 修改前表内容 mysql> select * from user; +----------------------------+------+------------+-------+...
  • arkblue
  • arkblue
  • 2015-06-07 17:44:55
  • 1359

用c#在数据中读取上一行下一行数据

  • 2010年05月24日 10:34
  • 51KB
  • 下载
收藏助手
不良信息举报
您举报文章:同一张表内、利用变化的上一行数据动态地修改下一行数据(示例Demo)
举报原因:
原因补充:

(最多只允许输入30个字)