如何计算贷方和借方的余额?
Posted
技术标签:
【中文标题】如何计算贷方和借方的余额?【英文标题】:How to calculate balance from credit and debit? 【发布时间】:2020-01-20 16:34:37 【问题描述】:如何从以下txn_tbl
表中为每个客户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);
【问题讨论】:
您应该包含您尝试过的所有查询。 @GordonLinoff 现在我编辑了我的问题 一个简单的聚合(带有GROUP BY
子句的SUM()
函数)就可以了。
@Nvr 请您告诉我们您希望从您显示的示例数据中得到什么。查询后的结果是什么。干杯!另外,我看到你过去的问题:你知道你可以接受正确的答案吗?你知道你可以投票给对你有帮助的答案吗?
@VBoka 我不知道投票。请指导我进行投票
【参考方案1】:
如果您想要 running 余额,可以使用条件逻辑进行窗口求和:
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
【讨论】:
【参考方案2】:您只需总结您的金额即可。诀窍是让您的信用卡(或借方,不清楚)为负数:
SELECT cust, Sum(CASE WHEN TXN_CODE = 'DEB' THEN -1 ELSE 1 END * amt) as
FROM txn_tbl
GROUP BY cust
【讨论】:
以上是关于如何计算贷方和借方的余额?的主要内容,如果未能解决你的问题,请参考以下文章