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

AdventureWorks2019按年度季度分组汇总销售收入SQL问题

问题原因

你原有语句无法实现季度汇总的核心问题出在GROUP BY逻辑和聚合函数的使用上:

  1. GROUP BY中包含了SSOH.[OrderDate](具体到时分秒的订单日期)、SSOD.[LineTotal](单条订单明细的收入)两个细粒度字段,导致每一条订单明细都会单独成为一个分组,自然同季度会出现多条重复维度的数据。
  2. 没有对收入字段使用聚合函数,直接返回了单条明细的收入值,没有做求和计算。

修改后的完整SQL语句

SELECT
SST.[Name] AS RegionName,
CASE WHEN SSOH.[OnlineOrderFlag] = 1 THEN 'Online' ELSE 'Reseller' END AS [SalesChannel],
YEAR(SSOH.[OrderDate]) AS Year,
DATEPART(Quarter, SSOH.[OrderDate]) AS Quarter,
SUM(SSOD.[LineTotal]) AS Revenue -- 对同分组下所有明细收入求和
FROM [Sales].[SalesOrderDetail] AS SSOD
LEFT JOIN [Sales].[SalesOrderHeader] AS SSOH
ON SSOD.[SalesOrderID] = SSOH.[SalesOrderID]
-- 提示:如果你没有用到Product表的字段或筛选条件,可以删除下面这行JOIN,提升查询效率
LEFT JOIN [Production].[Product] AS PP
ON SSOD.[ProductID] = PP.[ProductID]
LEFT JOIN [Sales].[SalesTerritory] AS SST
ON SST.TerritoryID = SSOH.TerritoryID
WHERE SST.[Name] = 'Australia' AND SSOH.[OnlineOrderFlag] = 1
-- GROUP BY仅保留你需要的分组维度
GROUP BY SST.[Name], SSOH.[OnlineOrderFlag], YEAR(SSOH.[OrderDate]), DATEPART(Quarter, SSOH.[OrderDate])

修改说明

  • 收入字段改用SUM()聚合函数,实现同组所有明细收入的汇总计算
  • GROUP BY中移除了细粒度的OrderDate和LineTotal字段,仅保留区域、销售渠道标记、年份、季度四个分组维度
  • 补充了YEAR(SSOH.[OrderDate])到GROUP BY中,避免不同年份的同季度数据被合并到同一个分组
  • SELECT中的销售渠道CASE表达式依赖OnlineOrderFlag字段,该字段加入GROUP BY后同一分组内值一致,不会产生额外的拆分分组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:06:00