基于列值的SQL Server SUM查询需求:按Dr/Cr统计账户收支
解决方案:按账户统计收支总和
针对你需要按账户分别统计支出(Dr金额总和)和收入(Cr金额总和)的需求,我们可以用SQL Server的条件聚合函数来实现,一次性完成分组汇总,逻辑清晰且效率很高。
完整SQL查询语句
SELECT fld_account_id AS AccountID, SUM(CASE WHEN fld_cr_dr = 'Dr' THEN fld_amount ELSE 0 END) AS Payments, SUM(CASE WHEN fld_cr_dr = 'Cr' THEN fld_amount ELSE 0 END) AS Receipts FROM [你的表名] -- 替换成实际的表名称 GROUP BY fld_account_id ORDER BY fld_account_id;
代码逻辑说明
- 条件聚合:通过
CASE语句判断每一行的收支类型,只累加对应类型的金额,非目标类型则加0,不会影响最终总和。 - 分组统计:
GROUP BY fld_account_id保证每个账户只输出一行汇总数据,避免重复。 - 排序优化:
ORDER BY让结果按账户ID有序排列,更直观易读。
基于测试数据的预期结果
用你提供的测试数据执行后,会得到如下汇总结果:
| AccountID | Payments | Receipts |
|---|---|---|
| 26 | 35000 | 20000 |
| 27 | 35000 | 5000 |
(计算验证:账户26的Dr金额总和为1000+2000+3000+5000+7000+8000+9000=35000;Cr金额总和为4000+6000+10000=20000;账户27的收支计算逻辑同理)
内容的提问来源于stack exchange,提问作者Nirav Parsana
相关产品推荐
相关产品推荐

