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

MS Access左连接查询展示所有收入中心 无当月收入也保留行

问题根因

当前查询逻辑存在两个核心问题,导致仅当月无收入、历史月份有收入的中心被过滤:

  1. 日期筛选条件写在了最外层WHERE子句中:左连接完成后,当月无收入但其他月份有数据的收入中心,关联出的行记录ITM_Date为非查询月份的值,不满足月份筛选条件,会被直接排除
  2. 原有逻辑中的Year([ITM_Date]) Is Null判断,仅能覆盖从未产生过任何收入的收入中心(这类中心关联后所有发票字段全为NULL),无法覆盖有历史收入、仅当月无收入的场景
修正后的SQL
SELECT 
  TSub_ItmNominal.ID_ItemNominal, 
  TSub_ItmNominal.ItemNominal_Description, 
  Sum(Nz(monthly_data.ITM_Net, 0)) AS ITM_Net_Total
FROM TSub_ItmNominal 
LEFT JOIN (
  -- 提前筛选指定年月的有效发票行数据,避免关联全量历史数据
  SELECT T_LineItems.ITM_Nominal, T_LineItems.ITM_Net
  FROM T_Invoice 
  INNER JOIN T_LineItems 
    ON T_Invoice.ITM_Reference = T_LineItems.ITM_Reference
  WHERE 
    Year(T_Invoice.ITM_Date) = [report_year]
    AND Month(T_Invoice.ITM_Date) = [report_month]
) AS monthly_data 
  ON TSub_ItmNominal.ID_ItemNominal = monthly_data.ITM_Nominal
WHERE TSub_ItmNominal.ID_ItemNominal Like "4*"
GROUP BY TSub_ItmNominal.ID_ItemNominal, TSub_ItmNominal.ItemNominal_Description
ORDER BY TSub_ItmNominal.ID_ItemNominal;
关键调整说明
  • 将日期筛选逻辑下沉到左连接的子查询内部:子查询仅返回查询年月的有效发票行,不会带出其他月份的历史数据,左连接时未匹配到当月数据的收入中心,关联字段自动为NULL
  • 移除了冗余的IS NULL判断:未匹配到当月数据的收入中心,Nz函数会自动将NULL值转为0,求和后结果即为$0.00
  • 将收入中心编码的筛选从HAVING子句移到WHERE子句:编码是分组维度而非聚合计算结果,在WHERE层过滤执行效率更高
  • 调整了发票表和行项目表的关联逻辑:将原来嵌套的RIGHT JOIN改为更直观的INNER JOIN,避免多表关联顺序混乱导致的数据匹配错误

修正后所有编码以4开头的收入中心都会完整展示,当月无收入的中心对应金额会显示为$0.00,符合预期需求。

内容的提问来源于stack exchange,提问作者James Crafton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:45:54