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

无需子查询:按年月汇总发票数据及解决yerQty字段缺失问题

解决方案:无Subquery实现月度汇总+年度总计

先帮你梳理下需求核心:按月份聚合发票数据,同时展示全年度总金额和全年度ss类别的总数量,且不能用子查询。你的当前查询主要问题是没正确处理年度总数量的窗口计算,同时分组逻辑和聚合函数的搭配存在语法错误。

正确的SQL语句

SELECT
    Month,
    SUM(Amt) OVER () AS yearamt,
    SUM(Amt) AS Amt,
    SUM(CASE WHEN Desc = 'ss' THEN QTy ELSE NULL END) AS QTy,
    SUM(CASE WHEN Desc = 'ss' THEN QTy ELSE 0 END) OVER () AS yerQty
FROM Table1
GROUP BY Month
ORDER BY Month;

语句细节解释

  1. 年度总金额yearamt:用SUM(Amt) OVER ()窗口函数,不指定分区范围,直接计算全表Amt的总和,这样每个月度行都会重复显示这个年度总计值。
  2. 月度Amt汇总:SUM(Amt)配合GROUP BY Month,得到每个月的总金额。
  3. 月度ss类别的QTy汇总:SUM(CASE WHEN Desc = 'ss' THEN QTy ELSE NULL END),只对Desc为ss的行累加QTy,非ss行直接返回NULL,完全匹配你目标结果里Month4的QTy为null的情况。
  4. 年度ss类别的总数量yerQty:用窗口函数SUM(CASE WHEN Desc = 'ss' THEN QTy ELSE 0 END) OVER (),先把非ss类别的QTy转为0,再计算全表的总和,就能得到年度ss类别的总数量9。

对原查询的修正点

  • 原查询里Sum(amount))amount存在语法错误,多了一个闭合括号
  • 原查询分组包含了DESC,会导致按「月份+Desc」分组,而非按月份整体汇总,所以要去掉DESC的分组项
  • 年度总数量需要通过窗口函数计算全表的ss类别QTy总和,而非仅在分组内计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:22:47