如何在一次查询中统计全年12个月各自的求和结果?
修改SQL查询以自动返回全年各月份求和结果
原查询通过硬编码月份获取指定商品的单月销量总和,代码如下:
EKA = CONVERT(DECIMAL(10,0), (SELECT ISNULL(SUM(LP.QTY), 0) FROM Invoice LP WHERE LP.ARTICLE = A.ARTICLE AND YEAR(LP.DATE) = YEAR(GETDATE()) AND MONTH(LP.date) = 1/2/3/4/5/6/7/8/9/10/11/12) FROM ARTICLE A WHERE A.ARTICLE = 'A001'
修改后的查询方案
无需硬编码月份,自动生成1-12月的销量汇总,每行对应一个月份:
-- 生成1到12月的月份序列 WITH Months AS ( SELECT 1 AS MONTH UNION ALL SELECT MONTH + 1 FROM Months WHERE MONTH < 12 ) SELECT m.MONTH, CONVERT(DECIMAL(10,0), ISNULL(SUM(LP.QTY), 0)) AS EKA FROM Months m LEFT JOIN Invoice LP ON MONTH(LP.DATE) = m.MONTH AND YEAR(LP.DATE) = YEAR(GETDATE()) AND LP.ARTICLE = 'A001' GROUP BY m.MONTH ORDER BY m.MONTH;
说明
- 用CTE
Months生成1至12的月份列表,确保每个月份都有返回记录,即使该月无销售数据 - 通过左连接关联
Invoice表,匹配当前年份对应月份的指定商品记录 - 按月份分组求和,用
ISNULL处理无数据场景,保证返回0而非NULL - 最终结果按月份升序排列,符合需求格式
输出示例
| MONTH | EKA |
|---|---|
| 1 | 100 |
| 2 | 110 |
| 3 | 90 |
| ... | ... |
| 11 | 40 |
| 12 | 150 |
内容的提问来源于stack exchange,提问作者Kevin Zorn
相关产品推荐
相关产品推荐

