我有一个现有的表名'VALUABLE':
FIELDA
10个
14个
30个
18个
16个
19
我想构建另一个表'NEWVAL',如下所示:
Field1 Field2 Field3
10 ***** 14 ****** 4
14 ***** 30 ****** 16
30 ***** 18 ****** 0(而不是-12)
18 ***** 16 ****** 0(而不是-2)
16 ***** 19 ****** 3
字段3是Field2-Field1的差异。获得的任何负值都给出零值。
我需要SQL帮助才能执行此操作。
事先提前。
答案 0 :(得分:1)
我假设您在表中有一个列id
来指定排序。基本上,您希望在SQL Server 2008中实现lead()
函数(它在2012+版本中)。这是使用outer apply
:
select v.FieldA, vnext.VfieldA,
(case when vnext.VfieldA >= v.FieldA then vnext.VfieldA - v.FieldA
else 0
end) as diff
from valuable v outer apply
(select top 1 v2.*
from valuable v2
where v2.id > v.id
order by v2.id desc
) vnext;
您可能希望where vnext.fieldA is null
删除最后一行。