数据统计例子,相关子查询!(SQL 中循环操作一列数据方法)
2005-06-13 11:29
1166 查看
问题:
数据及需要实现的累计值--即每次“发货数量”与上次发货的“累计”值相加后再放入一张表中体现出来
表A
_______________________________________
| ID 提单号 提货日期 实发数量 累计|
|--------------------------------------|
| 1 0007 2005-01-1 80.3 80.3|
| 2 0007 2005-01-1 20.2 100.5| /* 80.3+20.2=100.5
| 3 0008 2005-01-6 10.5 111| /* 100.5+10.5=111
---------------------------------------+
解决方案1:
==数据装载
declare @Table table (id int identity(1,1),提货号 varchar(4),提货日期 datetime,实发数量 float)
insert @table select '0007','2005-01-1',80.3
union all select '0007','2005-01-1',20.2
union all select '0008','2005-01-6',10.5
==测试
select *,累计=(select sum(实发数量) from @Table where id<=a.id)
from @Table a
==结果
==结果
1 0007 2005-01-01 00:00:00.000 80.299999999999997 80.299999999999997
2 0007 2005-01-01 00:00:00.000 20.199999999999999 100.5
3 0008 2005-01-06 00:00:00.000 10.5 111.0
==解决方案2: 游标
==数据装载
declare @tab table (ID int,单号 varchar(20),提货日期 datetime,实发数量 decimal(8,1))
insert @tab
values(1,'0007','2005-01-01',80.3)
insert @tab
values(2,'0007','2005-01-01',20.2)
insert @tab
values(3,'0008','2005-01-06',10.5)
==测试
declare @tab1 table (ID int,单号 varchar(20),提货日期 datetime,实发数量 decimal(8,1),累计 decimal(8,1))
declare @ID int
declare @单号 varchar(20)
declare @提货日期 datetime
declare @实发数量 decimal(8,1)
declare @累计 decimal(8,1)
set @累计=0
declare Num_Cursor CURSOR FOR
select * from @tab
open Num_Cursor
fetch next from Num_Cursor into @ID,@单号,@提货日期,@实发数量
while @@FETCH_STATUS=0
begin
set @累计=@累计+@实发数量
insert @tab1
values(@ID,@单号,@提货日期,@实发数量,@累计)
fetch next from Num_Cursor into @ID,@单号,@提货日期,@实发数量
end
close Num_Cursor
deallocate Num_Cursor
select * from @tab1
==结果
1 0007 2005-01-01 00:00:00.000 80.299999999999997 80.299999999999997
2 0007 2005-01-01 00:00:00.000 20.199999999999999 100.5
3 0008 2005-01-06 00:00:00.000 10.5 111.0
数据及需要实现的累计值--即每次“发货数量”与上次发货的“累计”值相加后再放入一张表中体现出来
表A
_______________________________________
| ID 提单号 提货日期 实发数量 累计|
|--------------------------------------|
| 1 0007 2005-01-1 80.3 80.3|
| 2 0007 2005-01-1 20.2 100.5| /* 80.3+20.2=100.5
| 3 0008 2005-01-6 10.5 111| /* 100.5+10.5=111
---------------------------------------+
解决方案1:
==数据装载
declare @Table table (id int identity(1,1),提货号 varchar(4),提货日期 datetime,实发数量 float)
insert @table select '0007','2005-01-1',80.3
union all select '0007','2005-01-1',20.2
union all select '0008','2005-01-6',10.5
==测试
select *,累计=(select sum(实发数量) from @Table where id<=a.id)
from @Table a
==结果
==结果
1 0007 2005-01-01 00:00:00.000 80.299999999999997 80.299999999999997
2 0007 2005-01-01 00:00:00.000 20.199999999999999 100.5
3 0008 2005-01-06 00:00:00.000 10.5 111.0
==解决方案2: 游标
==数据装载
declare @tab table (ID int,单号 varchar(20),提货日期 datetime,实发数量 decimal(8,1))
insert @tab
values(1,'0007','2005-01-01',80.3)
insert @tab
values(2,'0007','2005-01-01',20.2)
insert @tab
values(3,'0008','2005-01-06',10.5)
==测试
declare @tab1 table (ID int,单号 varchar(20),提货日期 datetime,实发数量 decimal(8,1),累计 decimal(8,1))
declare @ID int
declare @单号 varchar(20)
declare @提货日期 datetime
declare @实发数量 decimal(8,1)
declare @累计 decimal(8,1)
set @累计=0
declare Num_Cursor CURSOR FOR
select * from @tab
open Num_Cursor
fetch next from Num_Cursor into @ID,@单号,@提货日期,@实发数量
while @@FETCH_STATUS=0
begin
set @累计=@累计+@实发数量
insert @tab1
values(@ID,@单号,@提货日期,@实发数量,@累计)
fetch next from Num_Cursor into @ID,@单号,@提货日期,@实发数量
end
close Num_Cursor
deallocate Num_Cursor
select * from @tab1
==结果
1 0007 2005-01-01 00:00:00.000 80.299999999999997 80.299999999999997
2 0007 2005-01-01 00:00:00.000 20.199999999999999 100.5
3 0008 2005-01-06 00:00:00.000 10.5 111.0
相关文章推荐
- 数据统计例子,相关子查询!(SQL 中循环操作一列数据方法)
- sql脚本查询数据库表,数据,结构,约束等操作的方法
- sql脚本查询数据库表,数据,结构,约束等操作的方法
- SQL查询遍历数据方法一 [ 临时表 + While循环]
- SQL查询遍历数据方法一 [ 临时表 + While循环]
- SQL查询遍历数据方法二 [ 游标 + While循环]
- SQL查询遍历数据方法二 [ 游标 + While循环]
- 本人开发系统--新生报到与数据统计管理系统--数据库设计及相关查询SQL语句笔记
- Oracle spatial 空间数据SQL查询操作相关实例
- Oracle spatial 空间数据SQL查询操作相关实例
- T-SQL查询前十条数据相关操作
- SQL查询相关技术-7.SQL操作(形成2个数据表)
- 一个sql例子,分组,查询,统计等操作,老忘记,记录一下
- sparkSQL里 sql语句,dataframe,Thrift Server JDBC都可以实现对数据的查询,过滤等操作, 哪这3种情况分别是什么情况下使用
- sql查询出来的一列多行数据拼接起来
- 【Oracle】数据库SQL 数据操作和查询
- SQL高级应用之使用SQL查询Excel表格数据的方法
- SQL查询前几条数据的方法
- SQL oracle 用rownum方法查询最近更新的n条数据