小小问题集合3---本条记录某一字段由上条记录的部分内容与本记录部分内容计算而来
2010-07-20 14:04
417 查看
/*
*关于本条记录某一字段由上条记录的部分内容与本记录部分内容计算而来
*/
if OBJECT_ID('tb') is not null
drop table tb
go
create table tb (field1 int, field2 decimal(3,1) ,field3 decimal(3,1))
insert tb select
1, 2.3, 4.5 union select
2, 2.3, 3.4 union select
4, 3.4, 4.5 union select
6, 4.5, 5.6 union select
7, 5.6, 6.7
go
/*
想显示为:
field1 field2 field3 field4
1 2.3 4.5 0
2 2.3 3.4 -1.1
4 3.4 4.5 -2.2
6 4.5 5.6 -3.3
7 5.6 6.7 -4.4
field4的计算规则是,第一条为,
后面的就等于上一条的field4+本条的field2-本条的field3
*/
--2000
select *,
field4=case when field1=(select MIN(field1) from tb) then 0
else field2-field3+(select isnull(SUM(field2-field3),0) from tb where K.field1>field1 and field1<>(select MIN(field1) from tb)) end
from tb K
go
--2005
with cte as
(
select rn=row_number()over(order by field1),* from tb
)
, cte2 as
(
select *,field4=cast(0 as decimal(9,1)) from cte where rn=1
union all
select b.*,cast(a.field4+(b.field2-b.field3) as decimal(9,1)) from cte2 a join cte b on a.rn=b.rn-1
)
select * from cte2
/*
field1 field2 field3 field4
----------- --------------------------------------- --------------------------------------- ---------------------------------------
1 2.3 4.5 0.0
2 2.3 3.4 -1.1
4 3.4 4.5 -2.2
6 4.5 5.6 -3.3
7 5.6 6.7 -4.4*/
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/feixianxxx/archive/2010/01/25/5256026.aspx
*关于本条记录某一字段由上条记录的部分内容与本记录部分内容计算而来
*/
if OBJECT_ID('tb') is not null
drop table tb
go
create table tb (field1 int, field2 decimal(3,1) ,field3 decimal(3,1))
insert tb select
1, 2.3, 4.5 union select
2, 2.3, 3.4 union select
4, 3.4, 4.5 union select
6, 4.5, 5.6 union select
7, 5.6, 6.7
go
/*
想显示为:
field1 field2 field3 field4
1 2.3 4.5 0
2 2.3 3.4 -1.1
4 3.4 4.5 -2.2
6 4.5 5.6 -3.3
7 5.6 6.7 -4.4
field4的计算规则是,第一条为,
后面的就等于上一条的field4+本条的field2-本条的field3
*/
--2000
select *,
field4=case when field1=(select MIN(field1) from tb) then 0
else field2-field3+(select isnull(SUM(field2-field3),0) from tb where K.field1>field1 and field1<>(select MIN(field1) from tb)) end
from tb K
go
--2005
with cte as
(
select rn=row_number()over(order by field1),* from tb
)
, cte2 as
(
select *,field4=cast(0 as decimal(9,1)) from cte where rn=1
union all
select b.*,cast(a.field4+(b.field2-b.field3) as decimal(9,1)) from cte2 a join cte b on a.rn=b.rn-1
)
select * from cte2
/*
field1 field2 field3 field4
----------- --------------------------------------- --------------------------------------- ---------------------------------------
1 2.3 4.5 0.0
2 2.3 3.4 -1.1
4 3.4 4.5 -2.2
6 4.5 5.6 -3.3
7 5.6 6.7 -4.4*/
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/feixianxxx/archive/2010/01/25/5256026.aspx
相关文章推荐
- 【小小问题集合3---本条记录某一字段由上条记录的部分内容与本记录部分内容计算而来】
- mysql同一表记录某一字段内容合并
- sql表查询某一字段为空的记录的问题
- 小小问题集合2---SQL Server中如何更改或删除字段的Default值
- mysql 用update和replace替换某一字段的部分内容
- sql 如何提取某一字段记录的部分数据
- IOS BUG记录 boundingRectWithSize计算内容宽度高度的问题
- sql表查询某一字段为空的记录的问题
- 怎样将Excel中的某一部分字段内容导入到SQL Server 2000的某个表的某些字段中
- hibernate 某一字段部分内容是自动生成 怎么实现?
- mysql批量修改某一字段中的部分内容【原创】
- sql表查询某一字段为空的记录的问题
- 【小小问题集合2---SQL Server中如何更改或删除字段的Default值】
- 关于EntityFramework4.x/5.0只更新某部分字段的问题
- SQL查询中用replace替换ntext,text字段部分内容
- 初次使用ubuntu出现的部分问题与解决方案记录
- 记录这几天工作内容发现的兼容性问题
- 集合源码部分记录
- 根据最小字段查找某一表中的记录
- postgresql建库流程及其部分问题记录