You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两个SQL查询以返回含零值的全时段交易统计

解决方案

要实现返回所有年月(包括无交易的记录)并对应显示总额(无交易则为0),核心是用左连接保留日历表的全量数据,关联交易统计结果后处理空值:

优化后的合并查询

SELECT
    CM.Month,
    CM.Year,
    ISNULL(T.Total, 0) AS Total
FROM CalendarMonths AS CM
LEFT JOIN (
    -- 子查询:统计指定交易类别的年月总额
    SELECT
        DATEPART(month, T.Date) AS Month,
        DATEPART(year, T.Date) AS Year,
        SUM(Amount) AS Total
    FROM Transactions T
    -- 直接过滤交易类别ID,无需关联TransactionClasses(除非需要该表的其他字段)
    WHERE T.TransactionClassId = 3
    GROUP BY DATEPART(month, T.Date), DATEPART(year, T.Date)
) AS T ON CM.Month = T.Month AND CM.Year = T.Year

关键说明

  • 左连接(LEFT JOIN):确保CalendarMonths的所有年月记录都被保留,即使没有对应的交易数据。
  • ISNULL(T.Total, 0):当子查询中没有对应年月的记录时,Total会返回NULL,用ISNULL将其替换为0。
  • 简化交易查询:原查询中关联TransactionClasses但未使用该表字段,直接在Transactions表过滤TransactionClassId=3即可,提升查询效率。

如果你的CalendarMonths表中的Month和Year字段是字符串类型,需要确保子查询返回的月份/年份格式与CalendarMonths一致(比如统一用两位月份字符串),避免匹配失败。

内容的提问来源于stack exchange,提问作者Musaffar Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:01:42