2017-06-25 7 views
-1

Ich habe diese Tabelle. Es enthält eine Spalte mit Punkten (a), eine Spalte mit einer playerid (b) und eine Spalte mit Spielen (c). Ich möchte diese Tabelle mit SQL in ein Format übersetzen, in dem Werte in Spalte a aufsummiert werden. Dies müsste in der folgenden Tabelle enthalten sein. Spalte d enthält die Werte von dem vorherigen Wert summiert, Spalte e der playerId en Spalte f der gamenumber enthältTabelle kumulative Summe zurücksenden

So würde ich das mag:

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 

In diese:

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 

Antwort

2

Sie können Verwenden Sie die SUM() OVER() Fensterfunktion (wenn Ihre Version von SQL Server dies unterstützt)

Bei Versionen, die dies nicht unterstützen, können Sie dies mit cross apply tun.

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

Kreuz scheint gelten, den Trick zu tun. Außer mir würde die totale Spalte in umgekehrter Reihenfolge sein. Jetzt stimmt der größte Wert in t1.total mit der Spalte mit der niedrigsten Spielnummer (c) überein. Zum Beispiel: f1 für e 11255 gibt 849 zurück, f2 für e 11255 gibt 649 zurück, f3 für e 11255 gibt 385 zurück. Ich möchte, dass f1 385, f2 649 und f3 849 ist. Ist so etwas auch möglich? – neuzehie

+1

musste die Bedingung "t1.c <= t.c" sein statt andersherum ... ich habe es bearbeitet. –

1

Ich glaube, Sie so etwas wie dies will:

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

Kumulative Summen mit dieser Syntax werden, da SQL Server unterstützt 2012.