2017-06-25 156 views
-1

我有這張表。它包含一個包含點(a)的列,包含playerid(b)的列和包含遊戲(c)的列。我想將這個使用SQL的錶轉換爲列a中的值得到總結的格式。這將需要導致下表。 d欄包含以前值相加的值,E列包含playerId恩F列gamenumber表返回累計金額

所以我想這樣的:

a  b   c 
1 385 11255  1 
2 378 11178  1 
3 370 11551  1 
4 264 11255  2 
5 100 11178  2 
6 405 11551  2 
7 200 11255  3 
8 412 11178  3 
9 50  11551  3 

進入這個:

d  e   f 
    385 11255  1 
    649 11255  2 
    849 11255  3 
    378 11178  1 
    478 11178  2 
    890 11178  3 
    370 11551  1 
    775 11551  2 
    825 11551  3 

回答

2

你可以使用SUM() OVER()窗口功能(如果您的SQL Server的版本支持)

select b,c,sum(a) over(partition by b order by c) as running_sum 
from tbl 

在不支持它的版本上,您可以使用cross apply執行此操作。

select t.b,t.c,t1.total 
from tbl t 
cross apply (select sum(a) as total from tbl t1 where t1.b=t.b and t1.c<=t.c) t1 
+0

交叉應用,似乎這樣的伎倆

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

與此語法累積和支持。除了我希望總列的順序相反。現在t1.total中的最大值與最低遊戲數(c)列匹配。例如:f1 for e 11255返回849,f2 for e 11255返回649,f3 for e 11255返回385.我想f1是385,f2 649和f3 849.這樣的事情也可能嗎? – neuzehie

+1

條件必須是't1.c <= t.c',而不是其他方式..我編輯它。 –

1

我想你想是這樣的:因爲SQL Server 2012的