2016-10-28 7 views
0

私の最初の表には、私は以下の結果のテーブルを必要とし、このTeradata。グループ内のすべての値を合計するにはどうすればよいですか?

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

のように見えます

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) 

ロジックは

1)ORDER元のテーブルであるBY value ASC

2)SUMアップこれまでのすべての値は累積でcumフィールド。したがって、cumの列はすべてvalueSUMであり、現在のvalueより小さい。

私はこれを行うことができますどのようにのみ、ストアドプロシージャ

せずにSQLでこれを行う必要がありますか?

答えて

1

さて、あなたは累積和説明:range unbounded precedingの標準SQLのデフォルトと異なるrows unbounded preceding and unbounded followingグループ合計)、にそれはデフォルトであるため

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

rows unbounded precedingは、Teradataのに必要とされています。

+0

'SEL "ID"、 "値"、( "値" で "ID" ORDER BYパーティション)にわたる和( "値") \t Myタブ\t群から1,2'これは'すべてを与えるBY 100' – john

+0

正しくしていますか? – john

+0

申し訳ありませんが、 '行の無制限の先行 '部分を忘れて固定しました。 – dnoeth

関連する問題