2014-03-25 163 views
0

这里选择前一记录的情况:我有一个表myTable其中包含3列:在SQL Server 2008中

  • IDint, identity
  • Groupvarchar(2), not null
  • valuedecimal(18,0), not null

表看起来像这样:

ID GROUP VALUE Prev_Value Result 
------------------------------------------ 
1 A  20  0   20 
2 A  30  20   10 
3 A  35  30   5 
4 B  100  0   100 
5 B  150  100   50 
6 B  300  200   100 
7 C  40  0   40 
8 C  60  40   20 
9 A  50  35   15 
10 A  70  50   20 

Prev_ValueResult列应该是自定义列。我需要把它放在视图上。任何人都可以帮忙请...非常感谢。

+0

你能解释一下“自定义字段”吗 – Bharadwaj

+0

我觉得他是指计算字段。 –

+0

请解释您用于生成Prev_Value和Result的规则。我看不到任何模式。 –

回答

2

您需要在此处执行的要点是将表连接到自身,其中部分连接条件是表的连接副本的值列小于原始值列的值。然后,您可以通过从原始表中的列和组选择连接表的最大值,让您的结果:

SELECT t1.id, t1.[Group], t1.Value 
    , coalesce(MAX(t2.Value),0) As Prev_Value 
    , t1.Value - coalesce(MAX(t2.Value),0) As Result 
FROM MyTable t1 
LEFT JOIN MyTable t2 ON t2.[Group] = t1.[Group] and t2.Value < t1.Value 
GROUP BY t1.id, t1.[Group], t1.Value 

一旦你可以更新到SQL Server 2012也将能够利用的new LAG keyword

+0

非常感谢你...你是男人!但如果运行在SQL 2012 ..将工作? – Haminteu

+0

这仍然可以在Sql Server 2012上运行。 –