2016-01-20 97 views
2

我想做一些數學運算,但在當時的每一行。如何爲此構建SQL查詢...?

例如:

A   B  C   D 
------------------------------- 
100  -50  =50  20160101 
100  0  =150  20160102 
100  -50  =100  20160103 

所以基本上C柱將永遠是過去所有的A +(B)列的總和,而不是未來的。有沒有人有想法如何在SQL中實現這一點?

我可以在代碼中做到這一點,但我想在SQL中做到這一點,只是在表中顯示結果。

P.S.我的英語不是最好的,所以請隨時詢問我是否不夠清楚。

+0

哪年SQL Server? – Matt

+0

不明白c列是做什麼的,爲什麼第二個是150,第三個是100 – sagi

+0

您使用哪些DBMS? Postgres的?甲骨文? –

回答

4

這被稱爲累計或運行總和。正常的方法是使用ANSI標準的窗口功能:

select a, b, 
     sum(a + b) over (order by d) as c, 
     d 
from t; 

如果您的SQL版本不支持窗口的功能,那麼你可以使用相關子查詢(性能通常會差很多):

select a, b, 
     (select sum(a + b) from t t2 where t2.d <= t.d) as c, 
     d 
from t; 
+0

謝謝,第二個解決方案完美地工作,只是在最後添加了d的順序。 – Bodul