基于Date_Year和Date_month列分组3个月区间的SQL问题求助
解决跨年度3个月销售额区间统计的SQL问题
嘿,我一眼就看出你遇到的问题啦——第二个跨年度的3个月区间统计没生效,核心原因是CASE语句里的逻辑判断用了AND,但这两个条件根本不可能同时满足!
问题分析
你写的第二个CASE条件是:
(date_year = 2016 AND date_month IN (11,12)) AND ((date_year = 2017 AND date_month = 1))
这意味着要找一条记录同时属于2016年11-12月并且2017年1月,显然没有这样的数据,所以SUM的结果肯定是NULL或者0。我们需要的是“满足前者或者满足后者”的记录,所以应该用OR代替AND。
修正后的SQL代码
SELECT -- 第一组:2016年10-12月 [2016_Oct_Dec] = SUM(CASE WHEN date_year = 2016 AND date_month IN (10,11,12) THEN Sales_amt END), -- 第二组:2016年11-12月 + 2017年1月 [2016/17_Nov_Jan] = SUM(CASE WHEN (date_year = 2016 AND date_month IN (11,12)) OR (date_year = 2017 AND date_month = 1) THEN Sales_amt END) FROM your_table_name; -- 记得替换成你的实际表名
更优雅的优化方案(如果有完整日期字段)
如果你的表中有完整的日期字段(比如sale_date,类型为DATE/DATETIME),建议直接用日期区间来判断,这样既避免拆分年月的逻辑错误,也更灵活易维护:
SELECT [2016_Oct_Dec] = SUM(CASE WHEN sale_date BETWEEN '2016-10-01' AND '2016-12-31' THEN Sales_amt END), [2016/17_Nov_Jan] = SUM(CASE WHEN sale_date BETWEEN '2016-11-01' AND '2017-01-31' THEN Sales_amt END) FROM your_table_name;
这样就能正确统计两个区间的销售额啦!
内容的提问来源于stack exchange,提问作者Swazzy
相关产品推荐
相关产品推荐

