如何计算贷方和借方的余额?

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

【讨论】:

以上是关于如何计算贷方和借方的余额?的主要内容,如果未能解决你的问题,请参考以下文章

如何动态从两个 SQL 表借方和贷方中获取余额

从借方和贷方表计算账户余额

使用Mysql从不同名称的不同表中选择值作为贷方和借方并计算余额

sap中借方为啥用s

设置和登记现金银行存款日记账怎么操作

收藏SAP记账码