Teradata的。如何对组内的所有值求和?

时间:2016-10-28 21:04:57

标签: 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列是所有SUM的{​​{1}},小于当前value

我需要在没有存储过程的情况下使用sql执行此操作

我该怎么做?

1 个答案:

答案 0 :(得分:1)

嗯,你描述一个累积总和:

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

Teradata需要rows unbounded preceding,因为它默认为rows unbounded preceding and unbounded following群组总和),这与标准SQL的默认值{{不同1}}。