从现有的表创建辅助表

时间:2014-11-17 15:04:25

标签: sql sql-server-2008 plsql

我有一个现有的表名'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帮助才能执行此操作。

事先提前。

1 个答案:

答案 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删除最后一行。