前言
今天遇到一个以前没见过的问题,需要对月份进行判断,然后进行一个求和操作,自己以前没有遇到过此类问题,所以在群里询问了各类大佬,最后终于解决了问题,虽然不是很难,但是也学到的新的东西,在此做一个记录。
好了,言归正传,上问题!
筛选xx表 A类+四大领域+1-上个月税后应收汇总
在这个问题中,需要根据当前月份进行判断,然后将1到该月的数据进行累加汇总操作。
所以此问题的解决方法如下:
SELECT
CASE
WHEN MONTH (CURRENT_DATE()) = 1 THEN IFNULL(SUM(a.january),0)
WHEN MONTH (CURRENT_DATE()) = 2 THEN IFNULL(SUM(a.january+a.february),0)
WHEN MONTH (CURRENT_DATE()) = 3 THEN IFNULL(SUM(a.january+a.february+a.march),0)
WHEN MONTH (CURRENT_DATE()) = 4 THEN IFNULL(SUM(a.january+a.february+a.march+a.april),0)
WHEN MONTH (CURRENT_DATE()) = 5 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may),0)
WHEN MONTH (CURRENT_DATE()) = 6 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may+a.june),0)
WHEN MONTH (CURRENT_DATE()) = 7 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may+a.june+a.july),0)
WHEN MONTH (CURRENT_DATE()) = 8 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may+a.june+a.july+a.august),0)
WHEN MONTH (CURRENT_DATE()) = 9 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may+a.june+a.july+a.august+a.september),0)
WHEN MONTH (CURRENT_DATE()) = 10 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may+a.june+a.july+a.august+a.september+a.october),0)
WHEN MONTH (CURRENT_DATE()) = 11 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may+a.june+a.july+a.august+a.september+a.october+a.november),0)
WHEN MONTH (CURRENT_DATE()) = 12 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may+a.june+a.july+a.august+a.september+a.october+a.november+a.december),0)
ELSE
0
END
FROM project a
WHERE a.type='A' and a.`year`='2020'
在该语句中,通过case when操作判断该月份为第几个月,然后加上对应的月份,最后通过sum求和得到结果。
同时通过IFNULL来判断列是否为null,如何为null则返回0,进行一个判空处理。