【问题标题】:Creation of secondary table from existing one从现有表创建辅助表
【发布时间】:2014-11-17 15:04:25
【问题描述】:

我有一个现有的表名“VALUABLE”:

字段A
10
14
30
18
16
19

我想构造另一个表'NEWVAL'如下:

字段1 字段2 字段3
10 ***** 14 * * 4
14 ***** 30 * * 16
30 ***** 18 ****** 0(而不是 -12)
18 ***** 16 ****** 0(而不是 -2)
16 ***** 19 * * 3

字段 3 是字段 2 - 字段 1 的差异。获得的任何负值都被赋予零值。

我需要 SQL 帮助才能做到这一点。

提前致谢。

【问题讨论】:

  • SQL 表表示无序集。除非列指定排序,否则没有排序。你有这样的专栏吗?
  • 戈登需要完全按照我上面发布的那样显示第二个表格。

标签: sql sql-server-2008 plsql


【解决方案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 来删除最后一行。

【讨论】:

  • Outer 关键字对于Outer Apply 是可选的吗?不确定是错字还是不需要。
  • Thnks Gordon :) 但是外部应用在哪里?
  • @Siyual 。 . .实际上,cross apply 可能足以满足您的目的,因此它应该可以工作。
猜你喜欢
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 2015-11-15
相关资源
最近更新 更多