如何通过SQL查询获取指定日期范围内的账户收支汇总结果
完善SQL查询以按日期范围统计账户收支
需求说明
我在SQL Server中有两张表:
- Accounts表:存储账户信息(含AccID、AccName字段)
- Transaction_Body表:存储交易明细(含AccID、Debt借方、Credit贷方、交易日期字段,假设日期字段名为
TransDate)
需要指定起始和结束日期,统计每个账户在该日期范围内的总借方、总贷方金额,得到目标查询结果。
现有代码
SELECT Accounts.AccName, SUM(ISNULL(Transaction_Body.Debt, 0)) AS [total debet], SUM(ISNULL(Transaction_Body.Credit, 0)) AS [total Credit] FROM Accounts LEFT JOIN Transaction_Body ON Accounts.AccID = Transaction_Body.AccID GROUP BY Accounts.AccName
完善后的代码
-- 定义日期参数,替换为实际需要的起始/结束日期 DECLARE @StartDate DATE = '2023-01-01' DECLARE @EndDate DATE = '2023-12-31' SELECT Accounts.AccName, SUM(ISNULL(Transaction_Body.Debt, 0)) AS [总借方], SUM(ISNULL(Transaction_Body.Credit, 0)) AS [总贷方] FROM Accounts LEFT JOIN Transaction_Body ON Accounts.AccID = Transaction_Body.AccID -- 添加日期范围过滤,仅统计指定区间内的交易 AND Transaction_Body.TransDate BETWEEN @StartDate AND @EndDate GROUP BY Accounts.AccName
关键调整说明
- 新增日期参数
@StartDate和@EndDate,便于快速修改查询的日期范围 - 将日期过滤条件放在
LEFT JOIN的ON子句中,确保无交易的账户也能被显示(借方、贷方金额为0),如果放在WHERE子句会过滤掉无交易的账户 - 若你的Transaction_Body表中日期字段名称不是
TransDate,请替换为实际字段名 - 将别名调整为中文表述,更符合中文使用习惯
内容的提问来源于stack exchange,提问作者Ahmed Saif
相关产品推荐
相关产品推荐

