Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Laufende Summe nach gruppierten Datensätzen in der Tabelle

Benötigen Sie den zusätzlichen Tisch wirklich?

Sie können die benötigten Daten mit einer einfachen Abfrage erhalten, die Sie natürlich als Ansicht erstellen können, wenn Sie möchten, dass sie wie eine Tabelle aussieht.

So erhalten Sie die gesuchten Daten:

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

Dadurch wird eine Ansicht erstellt, die Ihnen die Daten wie in einer Tabelle anzeigt:

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

Wenn Sie die Tabelle wirklich brauchen, meinen Sie damit, dass Sie sie ständig aktualisieren müssen? oder nur einmalig? Wenn es sich um eine einmalige handelt, können Sie natürlich mit der obigen Abfrage "Tabelle als Auswahl erstellen".

Testdaten, die ich verwendet habe, sind:

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;

Bearbeiten:

vergessen hinzuzufügen; Sie haben angegeben, dass die Tabelle bestellt werden soll - das macht keinen Sinn und lässt mich denken, dass Sie wirklich meinen, dass Sie die Abfrage / Ansicht wollten - die Bestellung ist ein Ergebnis der von Ihnen ausgeführten Abfrage, nicht etwas, das inhärent ist die Tabelle (ignoriert indexorganisierte Tabellen und dergleichen).