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

如何在SQL中通过Join生成销售数据更新报表?

Access 2016 每周销售数据更新报表SQL实现方案

Access 2016并不支持FULL JOIN,这是你之前尝试失败的核心原因。正确的思路是先通过UNION ALL合并所有周的销售数据,再按客户ID分组聚合计算所需指标,既能覆盖所有出现过的客户,也能高效统计最新数据。

具体实现步骤

  1. 合并多周数据:用UNION ALL将所有周表的核心字段(客户ID、采购日期、订单量、退货量)合并成一个临时数据集,确保字段名和数据类型一致。
  2. 分组聚合计算:对合并后的数据集按客户ID分组,计算最新采购日期、总订单量、总退货量及净采购量,用Nz()函数处理可能的NULL值,避免计算错误。

完整SQL代码

假设各周表的结构为:CustomerID(客户ID)、PurchaseDate(采购日期)、OrderQty(订单数量)、ReturnQty(退货数量),代码如下:

SELECT 
    CustomerID AS [Customer ID],
    MAX(PurchaseDate) AS [最新采购日期],
    Nz(SUM(OrderQty), 0) AS [订单数量总和],
    Nz(SUM(ReturnQty), 0) AS [退货数量总和],
    Nz(SUM(OrderQty), 0) - Nz(SUM(ReturnQty), 0) AS [净采购量]
FROM (
    -- 合并TableWeek1和TableWeek2的数据
    SELECT CustomerID, PurchaseDate, OrderQty, ReturnQty FROM TableWeek1
    UNION ALL
    SELECT CustomerID, PurchaseDate, OrderQty, ReturnQty FROM TableWeek2
    -- 后续新增周表时,直接追加UNION ALL语句即可
    -- UNION ALL
    -- SELECT CustomerID, PurchaseDate, OrderQty, ReturnQty FROM TableWeek3
) AS CombinedSalesData
GROUP BY CustomerID
ORDER BY CustomerID;

关键说明

  • UNION ALL vs UNION:用UNION ALL而非UNION,因为UNION会自动去重,可能导致重复的客户交易数据被错误合并,UNION ALL保留所有原始记录,确保统计准确。
  • Nz()函数的作用:如果某客户在某周没有订单或退货记录,对应的字段值为NULL,Nz()会将其转为0,避免求和时出现NULL结果。
  • 扩展性:后续新增周表(如TableWeek3、TableWeek4)时,只需在子查询中添加对应的UNION ALL SELECT语句,无需修改聚合逻辑。

内容的提问来源于stack exchange,提问作者Thomas Coverson II

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:50:04