sql >> Base de Datos >  >> RDS >> Oracle

Total acumulado por registros agrupados en la tabla

¿Realmente necesitas la mesa extra?

Puede obtener los datos que necesita con una simple consulta, que obviamente puede crear como una vista si desea que aparezca como una tabla.

Esto le dará los datos que está buscando:

select 
    account, bookdate, amount, 
    sum(amount) over (partition by account order by bookdate) running_total
from t
/

Esto creará una vista para mostrarte los datos como si fuera una tabla:

create or replace view t2
as
select 
    account, bookdate, amount, 
    sum(amount) over (partition by account order by bookdate) running_total 
from t
/

Si realmente necesita la tabla, ¿quiere decir que la necesita constantemente actualizada? o solo uno? Obviamente, si es único, puede simplemente "crear una tabla como selección" utilizando la consulta anterior.

Los datos de prueba que utilicé son:

create table t(account number, bookdate date, amount number);

insert into t(account, bookdate, amount) values (1, to_date('20080101', 'yyyymmdd'), 100);

insert into t(account, bookdate, amount) values (1, to_date('20080102', 'yyyymmdd'), 101);

insert into t(account, bookdate, amount) values (1, to_date('20080103', 'yyyymmdd'), -200);

insert into t(account, bookdate, amount) values (2, to_date('20080102', 'yyyymmdd'), 200);

commit;

editar:

se olvidó de agregar; usted especificó que quería que se ordenara la tabla; esto realmente no tiene sentido, y me hace pensar que realmente quiere decir que quería la consulta/vista:el orden es el resultado de la consulta que ejecuta, no algo inherente en la tabla (ignorando las tablas organizadas por índice y similares).