Oracle
 sql >> Base de données >  >> RDS >> Oracle

Total cumulé par enregistrements groupés dans le tableau

Avez-vous vraiment besoin de la table supplémentaire ?

Vous pouvez obtenir les données dont vous avez besoin avec une simple requête, que vous pouvez évidemment créer en tant que vue si vous voulez qu'elle apparaisse comme un tableau.

Cela vous permettra d'obtenir les données que vous recherchez :

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

Cela créera une vue pour vous montrer les données comme s'il s'agissait d'un tableau :

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

Si vous avez vraiment besoin du tableau, voulez-vous dire que vous en avez besoin en permanence ? ou juste un seul? Évidemment, s'il s'agit d'un seul, vous pouvez simplement "créer une table en tant que sélection" en utilisant la requête ci-dessus.

Les données de test que j'ai utilisées sont :

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;

modifier :

oublié d'ajouter; vous avez spécifié que vous vouliez que la table soit ordonnée - cela n'a pas vraiment de sens et me fait penser que vous voulez vraiment dire que vous vouliez la requête/vue - l'ordre est le résultat de la requête que vous exécutez, pas quelque chose qui est inhérent à la table (en ignorant les tables organisées par index et autres).