2016-10-28 4 views
0

Meine erste Tabelle sieht wie folgt ausTeradata. Wie summiere ich alle Werte innerhalb einer Gruppe?

id value 
1 20 
1 50 
1 30 
2 60 
2 5 
2 35 

muss ich die folgende resultierende Tabelle

id value cum   | (this is explanation not a field) 
_ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ 
1 20  20   | (0 + 20 = 20) 
1 30  50   | (30 + 20 = 50) 
1 50  100   | (50 + 50 = 100) 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ 
2 5  5   | (0 + 5 = 5) 
2 35  40   | (5 + 35 = 40) 
2 60  100   | (40 + 60 = 100) 

Die Logik ist

1) ORDER die ursprüngliche Tabelle BY value ASC

2) SUM up alle vorherigen Werte ergeben eine kumulative cum Feld. So ist die cum Spalte die SUM von allen value weniger als die aktuelle value.

Ich brauche diese

ohne gespeicherte Prozedur nur mit SQL zu tun, wie kann ich dies tun?

Antwort

1

Nun beschreiben Sie eine kumulative Summe:

sum(value) 
over (partition by id 
     order by values 
     rows unbounded preceding) 

Die rows unbounded preceding in Teradata benötigt wird, weil es standardmäßig rows unbounded preceding and unbounded following (eine Gruppe Sum), die als Standard-SQL-Standard von range unbounded preceding unterscheidet.

+0

'SEL "id", "Wert", SUM ("value") OVER (PARTITION BY "id" ORDER BY "value") \t VON MyTab \t GROUP BY 1,2' Das alles' gibt 100' – john

+0

Mache ich es richtig? – john

+0

Sorry, habe den 'unlimited previous' Teil vergessen, den Fehler behoben. – dnoeth

Verwandte Themen