我的初始表看起来像这样
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执行此操作
我该怎么做?
答案 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}}。