sql改正

统计当日的应还金额

原SQL: 在里面过滤4个有问题的借据

-- 统计备位截止当日的应还
SELECT sum(if(fee_type = 'Pricinpal',bill_amount,0)) as `当日应还本金(备)`
,sum(if(fee_type = 'Interest',bill_amount,0)) as `当日应还利息(备)`
,sum(if(fee_type = 'Penalty',bill_amount,0)) as `当日应还罚息(备)`
from
(select due_bill_no,fee_type,bill_amount ,bill_status ,bill_date ,repaid_date ,term
from acc_cus.cus_bill_detail
where
-- 统计逾期未还的数据
(project_no = 'BUWS0014200001' and bill_status = 'OVERDUE' AND bill_date < '2022-10-01')
-- 统计当天出账的数据,包括当天到期、提前结清的数据
or (project_no = 'BUWS0014200001' and bill_date = '2022-10-01')
-- 统计当天还款的以前逾期的数据
or (project_no = 'BUWS0014200001' AND bill_date < '2022-10-01' AND repaid_date = '2022-10-01' and bill_status = 'REPAID')
HAVING due_bill_no not in --剔除4个有问题的借据('1121072203075770893065','1121072209002313690366','1121072516444084110457','1121091914192720237495')
);

改正后的SQL:

SELECT
SUM(CASE WHEN fee_type = 'Pricinpal' THEN bill_amount ELSE 0 END) AS `当日应还本金(备)` ,
SUM(CASE WHEN fee_type = 'Interest' THEN bill_amount ELSE 0 END) AS `当日应还利息(备)` ,
SUM(CASE WHEN fee_type = 'Penalty' THEN bill_amount ELSE 0 END) AS `当日应还罚息(备)`
FROM
(SELECT
due_bill_no, fee_type, bill_amount, bill_status, bill_date, repaid_date, term
FROM
acc_cus.cus_bill_detail
WHERE
-- 统计逾期未还的数据
(project_no = 'BUWS0014200001' AND bill_status = 'OVERDUE' AND bill_date < '2022-10-01')
-- 统计当天出账的数据,包括当天到期、提前结清的数据
OR (project_no = 'BUWS0014200001' AND bill_date = '2022-10-01')
-- 统计当天还款的以前逾期的数据
OR (project_no = 'BUWS0014200001' AND bill_date < '2022-10-01' AND repaid_date = '2022-10-01' AND bill_status = 'REPAID')
) AS t
WHERE
due_bill_no NOT IN ('1121072203075770893065', '1121072209002313690366', '1121072516444084110457', '1121091914192720237495');

修改说明:

  1. 在SELECT语句中,使用了SUM和CASE WHEN语句来计算应还本金、利息和罚息的总和,避免了使用IF函数的错误。
  2. 在FROM子句中,将子查询的结果作为表t来使用,使得查询更加清晰。
  3. 在WHERE子句中,将NOT IN语句放在外层查询中,避免了在子查询中使用HAVING语句的错误。
posted @   捷后愚生  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2020-06-08 如何在面试中介绍自己的项目经验
点击右上角即可分享
微信分享提示