2014-03-25 167 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上運行。 –