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

如何用SQL生成含2022全年日期与全产品的销量汇总表?

解决方案:生成2022年全日期-全产品销量汇总表

要实现包含所有2022年日期+全部产品的销量汇总(无销量显示0),核心是先构建「日期-产品」的完整组合,再关联销售数据做聚合。直接用全连接不行的原因是:全连接只能匹配两张表中已有的记录,无法自动生成不存在的日期-产品组合。

具体SQL实现

-- 生成2022年所有日期与所有产品的完整组合,再左连接销售数据计算销量
SELECT
    dt.Date AS 销售日期,
    pt.ProductID,
    pt.ProductName,
    pt.ProductNumber,
    -- 用ISNULL将无销量的NULL转为0
    ISNULL(SUM(st.Qty_sold), 0) AS 销量
FROM
    -- 第一步:获取2022年全部日期
    Date_Table dt
-- 第二步:交叉连接所有产品,生成所有日期-产品的组合
CROSS JOIN
    Product_table pt
-- 第三步:左连接销售表,关联日期和产品ID
LEFT JOIN
    Sales_Table st ON dt.Date = st.Date_of_Sale AND pt.ProductID = st.ProductID
-- 筛选2022年的数据
WHERE
    dt.Year = 2022
-- 按日期和产品分组聚合
GROUP BY
    dt.Date, pt.ProductID, pt.ProductName, pt.ProductNumber
-- 可选:按日期和产品排序
ORDER BY
    dt.Date, pt.ProductID;

关键逻辑说明

  • CROSS JOIN:生成2022年每个日期与每个产品的笛卡尔积,确保所有可能的组合都被包含,这是实现「无销量也显示」的核心。
  • LEFT JOIN:保留所有日期-产品组合,即使对应的销售记录不存在。
  • ISNULL(SUM(...), 0):聚合时,无销售记录的分组SUM结果为NULL,用ISNULL转换为0,符合需求。

如果你的Date_Table中没有2022年的全部日期,还需要先补全日期数据(比如用递归CTE生成连续日期),再执行上述逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:50:30