2014-08-29 106 views
1

我想补充我的表中的两个值,如:SQL查询添加前值到下一个值

Id Distance Duration ETA_Distance ETA_Duration 
1 0    0   20    60 
2 14   20   NULL    NULL 
3 12   10   NULL    NULL 
4 15   70   NULL    NULL 

考虑上面的表格,我想一个SQL查询这给我结果如下图所示:

Id Distance Duration ETA_Distance ETA_Duration 
1 0    0   20    60 
2 14   20   34    80 
3 12   10   46    90 
4 15   70   61    160 
+0

值从何而来? – Jens 2014-08-29 05:30:47

+0

请参阅[计算SQL Server中的简单运行总计](http://www.codeproject.com/Articles/300785/Calculating-simple-running-totals-in-SQL-Server) – 2014-08-29 05:32:23

+1

感谢TechDo。你的链接为我工作.. – 2014-08-29 05:43:10

回答

1

Mohan,请参阅下面的答案,它应该帮助你。 用你的表替换@table。 我用临时表来测试代码。

Declare @tab table (Id int,Distance int, Duration int, ETA_Distance int, ETA_Duration int) 
Insert into @tab values 
(1,0 , 0,20 ,60 ), 
(2,14, 20,NULL,NULL), 
(3,12, 10,NULL,NULL), 
(4,15, 70,NULL,NULL) 


Select X.Id,X.Distance,X.Duration, 
     Y.ETA_Distance,Y.ETA_Duration 
From @tab X 
Join (
Select B.Id, 
     Sum(A.Distance) ETA_Distance, 
     Sum(A.Duration) ETA_Duration 
From (Select Id,ISNULL(ETA_Distance,Distance) Distance,ISNULL(ETA_Duration,Duration) Duration From @tab) A, 
     (Select Id,ISNULL(ETA_Distance,Distance) Distance,ISNULL(ETA_Duration,Duration) Duration From @tab) B 
Where A.Id <= B.Id 
Group By B.Id) Y 
On  X.Id = Y. Id 

结果:

enter image description here

SQL可能看起来冗长,但逻辑是简单的。

+0

+1这里是该样本的链接['SQL Fiddle'](http://www.sqlfiddle.com/#!3/b427d/11) – 2014-08-29 06:28:14