2016-10-28 6 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 - это SUM всего value меньше, чем текущий value.

Мне нужно сделать это с помощью SQL только без хранимой процедуры

Как я могу это сделать?

ответ

1

Ну, вы описали накопленную сумму:

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

rows unbounded preceding необходима в Teradata, так как по умолчанию для rows unbounded preceding and unbounded followingгруппы Sum), которая отличается по умолчанию Standard SQL о range unbounded preceding.

+0

'SEL "Идентификатор", "значение", СУММА ("значение") НАД (PARTITION BY "ID" ORDER BY "значение") \t ОТ myTab \t GROUP BY 1,2' Это дает все' 100' – john

+0

Я делаю это правильно? – john

+0

Извините, забыл раздел 'rows unbounded previous', исправил его. – dnoeth

Смежные вопросы