在这种情况下:我有一个表myTable
,其中包含3列:
ID
int, identity
Group
varchar(2), not null
value
decimal(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_Value
和Result
列应为自定义列。我需要在视野上进行。有人可以帮忙吗?拜托......非常感谢你。
答案 0 :(得分: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。