Oracle
 sql >> Database >  >> RDS >> Oracle

Totale parziale per record raggruppati nella tabella

Hai davvero bisogno del tavolo in più?

Puoi ottenere i dati di cui hai bisogno con una semplice query, che puoi ovviamente creare come vista se vuoi che appaia come una tabella.

Questo ti darà i dati che stai cercando:

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

Questo creerà una vista per mostrarti i dati come se fosse una tabella:

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

Se hai davvero bisogno del tavolo, intendi che ne hai bisogno costantemente aggiornato? o solo una tantum? Ovviamente se è una tantum puoi semplicemente "creare una tabella come seleziona" usando la query sopra.

I dati di test che ho usato sono:

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;

modifica:

dimenticato di aggiungere; hai specificato che volevi che la tabella fosse ordinata - questo non ha davvero senso e mi fa pensare che tu intenda davvero che volevi la query/vista - l'ordinamento è il risultato della query che esegui, non qualcosa che è inerente in la tabella (ignorando le tabelle organizzate indici e simili).