如何计算贷方和借方的余额?
How to calculate balance from credit and debit?
如何根据以下 txn_tbl
table
每个客户 cust
的贷方 CRD
和借方 DEB
获取余额
SQL> SELECT * FROM txn_tbl;
CUS AMT TXN_CDE
--- ---------- ----------
A 500 CRD
B 400 CRD
A 350 CRD
C 235 DEB
C 800 CRD
B 132 DEB
D 673 CRD
这是我试过的查询
SELECT cust, LAG(amt,1,0) OVER (PARTITION BY cust ORDER BY cust) "Bal"
FROM
(SELECT cust, SUM(amt)amt
FROM txn_tbl
GROUP BY cust, txn_cde
ORDER BY 2);
如果您想要 运行 余额,您可以使用条件逻辑进行 window 求和:
select
t.*,
sum(case when txn_cde = 'CRD' then amt else -amt end)
over(partition by cus order by id) running_balance
from mytable
为此,您需要一个可用于排序记录的列;我假设 id
.
另一方面,如果您想要每个客户的总体余额(因此结果集中每个客户只有一个记录),您可以使用相同的聚合逻辑(并且不需要排序列):
select cus, sum(case when txn_cde = 'CRD' then amt else -amt end) balance
from mytable
group by cus
你可以把你的金额加起来。诀窍是让你的贷方(或借方,不清楚)为负数:
SELECT cust, Sum(CASE WHEN TXN_CODE = 'DEB' THEN -1 ELSE 1 END * amt) as
FROM txn_tbl
GROUP BY cust
如何根据以下 txn_tbl
table
cust
的贷方 CRD
和借方 DEB
获取余额
SQL> SELECT * FROM txn_tbl;
CUS AMT TXN_CDE
--- ---------- ----------
A 500 CRD
B 400 CRD
A 350 CRD
C 235 DEB
C 800 CRD
B 132 DEB
D 673 CRD
这是我试过的查询
SELECT cust, LAG(amt,1,0) OVER (PARTITION BY cust ORDER BY cust) "Bal"
FROM
(SELECT cust, SUM(amt)amt
FROM txn_tbl
GROUP BY cust, txn_cde
ORDER BY 2);
如果您想要 运行 余额,您可以使用条件逻辑进行 window 求和:
select
t.*,
sum(case when txn_cde = 'CRD' then amt else -amt end)
over(partition by cus order by id) running_balance
from mytable
为此,您需要一个可用于排序记录的列;我假设 id
.
另一方面,如果您想要每个客户的总体余额(因此结果集中每个客户只有一个记录),您可以使用相同的聚合逻辑(并且不需要排序列):
select cus, sum(case when txn_cde = 'CRD' then amt else -amt end) balance
from mytable
group by cus
你可以把你的金额加起来。诀窍是让你的贷方(或借方,不清楚)为负数:
SELECT cust, Sum(CASE WHEN TXN_CODE = 'DEB' THEN -1 ELSE 1 END * amt) as
FROM txn_tbl
GROUP BY cust