2017-06-25 4 views
-1

私はこのテーブルを持っています。それには、ポイント(a)、playerid(b)の列、およびゲーム(c)の列が含まれています。私はこのテーブルをSQLを使用して、列aの値が合計される形式に変換したいと考えています。これは、以下の表になる必要があります。列Dは、以前の値によって合計値が含まれ、列eはgamenumber F列エンplayerIdが含まれてい累計を返すテーブル

だから私はこれをしたいと思います。この中へ

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)の列と一致します。たとえば、e 11255のf1は849を返し、f2はeの11255を返します。649、f3のe 11255は385を返します.f1を385、f2 649、f3 849としたいと思います。 – neuzehie

+1

条件は、他の方法ではなく、t1.c <= t.c'でなければなりません。 –

1

私はあなたがこのような何かをしたいと思う:SQL Serverの2012