sql 循环处理表数据中当前行和上一行中某值相+/-

  曾经,sql中循环处理当前行数据和上一行数据浪费了我不少时间,学会后才发现如此容易,其实学问就是如此,难者不会,会者不难。

  以下事例,使用游标循环表#temptable中数据,然后让当前行和上一行中的argument1 相加 存放到当前行的 argument2 中,比较简单。

--drop table #temptable
create table #temptable
(
    argument1 int,
    argument2 int,
    argument3 datetime
)

declare @rowcount int,@argument1 int,@argument2 nvarchar(50),@argument3 datetime
set @rowcount=1
set @argument1=1
set @argument2=0
set @argument3=GETDATE()

while(@rowcount<100)
begin
    insert into #temptable(argument1,argument2,argument3)
                values(@argument1,@argument2,@argument3)

    set @argument1=@argument1 + datepart(day,@argument3)
    set @argument3=@argument3-1
    set @rowcount = @rowcount + 1
end

--select * from #temptable

declare @lastargument2 int
set @lastargument2=0
set @argument2=0
declare _cursor cursor for(select argument1 from #temptable)
open _cursor;
fetch next from _cursor into @argument2
while @@fetch_status = 0
begin
    update #temptable
    set argument2=@argument2+@lastargument2
    where current of _cursor

    set @lastargument2=@argument2
    fetch next from _cursor into @argument2
end
close _cursor
deallocate _cursor

--select * from #temptable

问一个问题:

第一句fetch next from _cursor into @argument2 这句为什么不能放在while循环的第一行,删除第二行呢?我记得自己当时在这里出错了,呵呵。

sql 循环处理表数据中当前行和上一行中某值相+/-

时间: 2024-11-05 16:26:54

sql 循环处理表数据中当前行和上一行中某值相+/-的相关文章

用PL/SQL DEVELOPER把表数据复制到另一个表中

1.创建新表,business_copy,并复制bisiness表的数据 CREATE TABLE BUSINESS_COPY AS SELECT * FROM BUSINESS; 注释:此SQL语句只是创建了表和复制了表的数据,但是没有把表的约束复制过来. 2.在PL/SQL DEVELOPER删除表 例如删除表business,可执行一下操作, 1)DROP TABLE BUSINESS; 2)找到此表,单击右键,选择跨界删除操作. 3.在PL/SQL DEVELOPER快速创建表. 4.如

Sql语句——删除表数据drop、truncate和delete的用法

一.SQL中的语法 1.drop table 表名称                         eg: drop table  dbo.Sys_Test   2.truncate table 表名称                     eg: truncate  table dbo.Sys_Test                     3.delete from 表名称 where 列名称 = 值      eg: delete from dbo.Sys_Test where te

SQL server 管理表数据

管理表数据 关系数据库的基本操作就是增删改查,即CRUD:Create.Retrieve.Update.Delete.其中,对于查询,我们已经详细讲述了SELECT语句的详细用法. 而对于增.删.改,对应的SQL语句分别是: INSERT:插入新记录: UPDATE:更新已有记录: DELETE:删除已有记录. 我们将分别讨论这三种修改数据的语句的使用方法. 1. INSERT 当我们需要向数据库表中插入一条新记录时,就必须使用INSERT语句. INSERT语句的基本语法是: INSERT I

SQL Server 的表数据简单操作

--表数据操作----添加表数据----向现有表添加数据--[use 要操作数据表的数据库名称go]insert [into] 数据表 [(字段名1,字段名2,字段名3, ...)] values(值1,值2,值3, ...) 例:use 商品管理数据库goinsert 客户信息表(客户姓名,客户编号,联系电话)values('刘培群','021','13927112594') --把查询到的表数据生成(添加到)一张新数据表--[use 要操作数据表的数据库名称go]select 字段名列表 i

SQL Server 的表数据简单操作(表数据查询)

--表数据查询----数据的基本查询-- --数据简单的查询--select * | 字段名[,字段名2, ...] from 数据表名 [where 条件表达式] 例:use 商品管理数据库goselect * from 商品信息表select 商品编号,商品名称,产地 from 商品信息表selelct * from 商品信息表 where 产地='辽宁沈阳' --关键字辅助查询----1)distinct关键字 (用来消除查询结果中的重复行,使用时紧跟在select命令后)--select

sql实现从两个表获取字段组成表数据再插入到函数表中

实现此效果说起来比较难以说明,我这里还是先将实现的效果已图的形式展示一下吧. 这是两个表的设计.我想实现的效果举个例子,以查询secretaryCharge为例: 点击"市级",我将查询到市级一下所有"区级"的secretaryCharge数目,并通过organizations中的fullName来作为名字,查到的统计数目作为值.得到的效果便是如下图所示: 具体实现sql语句就是用到join on,sql语句具体如下: insert @result(fullName

SqlServer和Oracle从多行记录(数据集)中查询结果并拼接成一个字符串的SQL语句(纵表数据转成拼接的文本)

使用情景: 例如:需要从学生成绩表中,查询分数大于95分的所有学生编号,用逗号分隔成一个字符串. 准备测试数据: create table score (id int,score int) insert into score values(1,90) insert into score values(2,96) insert into score values(3,99) 现在需要通过一个语句查询重"2,,3"这个结果字符串. SQL Server语句如下: select substr

SQL循环添加表中的字段

USE BookDiscuss DECLARE @num INT DECLARE @numdiff INT DECLARE @table  VARCHAR(50) DECLARE @sql VARCHAR(8000) SET @numdiff=3 SET @num=0 WHILE @num<@numdiff BEGIN SET @table='DiscussPost_'+CAST(@num AS VARCHAR(10)); SET    @sql= 'ALTER TABLE '[email pr

Oracle与SQL Server实现表数据同步

 将SQLServer2005中的某些表同步到Oracle数据库中,不同数据库类型之间的数据同步我们可以使用链接服务器和SQLAgent来实现. 实例:SQLServer2008有一个有表employ_epl是需要同步到一个EHR系统中(Oracle11g),实现数据库的同步步骤如下: 1.在Oracle中建立对应的employ_epl表,需要同步哪些字段我们就建那些字段到Oracle表中.注意:Oracle的数据类型和SQLServer的数据类型是不一样的,需要进行转换 --查看SQLServ