2つのテーブルがPAY
ありINVO
、1つのテーブルに表示したいのですが、日付で注文します
データベースがOracleであると仮定します。Oracleの分析関数SUMを使用して、目的の結果を得ることができます。
提供されたデータに基づくソリューションは次のとおりです。
create table pay
(
name varchar(10),
"date" date,
money number
);
create table invo
(
name varchar(10),
"date" date,
invo_total number
);
insert into pay values ('mark',to_date('01012016','mmddyyyy'),100);
insert into pay values ('mark',to_date('01012017','mmddyyyy'),200);
select * from pay;
NAME date MONEY
---------- --------- ----------
mark 01-JAN-16 100
mark 01-JAN-17 200
insert into invo values ('mark',to_date('03012015','mmddyyyy'),200);
insert into invo values ('mark',to_date('02012016','mmddyyyy'),150);
insert into invo values ('mark',to_date('01022017','mmddyyyy'),200);
select * from invo;
NAME date INVO_TOTAL
---------- --------- ----------
mark 01-MAR-15 200
mark 01-FEB-16 150
mark 01-FEB -17200
WITH trans_dtls AS
(
SELECT rownum rn,
name,
"date",
NVL(i.invo_total,0) de,
NVL(p.money,0) cr,
NVL(i.invo_total,0)- NVL(p.money,0) AS curr_sum
FROM pay p
FULL OUTER JOIN invo i USING (name,"date")
ORDER BY name,"date"
)
SELECT
td1.name,
td1."date",
de,
cr,
SUM(td1.curr_sum) over (order by td1.name,"date") bal
FROM trans_dtls td1;
NAME date DE CR BAL
---------- --------- ---------- ---------- ------ ----
マーク01-MAR-152000200
マーク01-JAN-
160100100マーク01-FEB-16150 0250
マーク01-JAN
-17020050マーク01-FEB-172000250
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加