日期:2014-05-18  浏览次数:20579 次

sql新手求助:同列2个值怎么求差
表有三列 序号 均值 差价  
每行的差价为本行的均值-上一行的均值,
请问:差价的语句怎么构造?

------解决方案--------------------
加一个排序的序号列,一个表当作两个表连接,按序号差值为1作为连接条件。
------解决方案--------------------
/*
表有三列 序号 均值 差价
每行的差价为本行的均值-上一行的均值,
请问:差价的语句怎么构造?
*/
go
if OBJECT_ID('tbl')is not null
drop table tbl
go
create table tbl(
序号 int,
均值 int,
差价 int
)
go
insert tbl
select 1,5,null union all
select 2,3,null union all
select 3,5,null union all
select 4,8,null union all
select 5,2,null union all
select 6,4,null

select *from tbl

;with T
as
(
select ROW_NUMBER()OVER(order by getdate())as num,
* from tbl
)

update tbl set 差价=isnull((isnull(T.均值,0)-isnull(tbl.均值,0)),0)
 from T where (tbl.序号+1)=T.num

select *from tbl

/*
序号 均值 差价
1 5 -2
2 3 2
3 5 3
4 8 -6
5 2 2
6 4 NULL
*/
------解决方案--------------------
探讨
表有三列 序号 均值 差价
每行的差价为本行的均值-上一行的均值,
请问:差价的语句怎么构造?