博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql 生成按月份统计SQL语句,为null设置为0
阅读量:6950 次
发布时间:2019-06-27

本文共 4021 字,大约阅读时间需要 13 分钟。

  hot3.png

在管理系统开发过程中,经常会按照月份统计系统数据,并生成报表。常用的做法就是写代码生成月份一条条地在数据库中查询结果,并组装反馈到前台。

经过多次百度后,结合自己的理解,将生成这个的SQL语句写成存储过程,记录在此备忘。

create or replace procedure pro_monthSqlBEGIN	#Routine body goes here...	declare months int;	declare i int default 0;	declare sqlStr text;	declare mtn varchar(20);	set months = TIMESTAMPDIFF(MONTH,startTime,endTime);	set sqlStr = 'select * from (';	repeat		set mtn = DATE_FORMAT(DATE_ADD(startTime,INTERVAL i MONTH),'%Y-%m');		if i <= months THEN			if i = 0 THEN				set sqlStr = CONCAT(sqlStr,				'(select ifnull(sum(total),0) orderTotal,',				'ifnull(sum(productSPrice * count),0) costTotal,',				'ifnull(DATE_FORMAT(orderTime,''%Y-%m''),\'',mtn,'\') `time`', 				'from view_order_product_supplier where DATE_FORMAT(orderTime,''%Y-%m'')=','\'',mtn,'\')');			else				set sqlStr = CONCAT(sqlStr,' union ',				'(select ifnull(sum(total),0) orderTotal,',				'ifnull(sum(productSPrice * count),0) costTotal,',				'ifnull(DATE_FORMAT(orderTime,''%Y-%m''),\'',mtn,'\') `time`', 				'from view_order_product_supplier where DATE_FORMAT(orderTime,''%Y-%m'')=','\'',mtn,'\')');			end if;		end if;		set i = i + 1;		until i>months	end repeat;	set sqlStr = concat(sqlStr,')a group by a.`time` order by a.`time` asc');	-- select * from view_order_product_supplier;	select sqlStr;END

执行这个存储过程后的SQL样式:

SELECT	*FROM	(		(			SELECT				ifnull(sum(total), 0) orderTotal,				ifnull(sum(productSPrice * count), 0) costTotal,				ifnull(					DATE_FORMAT(orderTime, '%Y-%m'),					'2019-01'				) `time`			FROM				view_order_product_supplier			WHERE				DATE_FORMAT(orderTime, '%Y-%m') = '2019-01'		)		UNION			(				SELECT					ifnull(sum(total), 0) orderTotal,					ifnull(sum(productSPrice * count), 0) costTotal,					ifnull(						DATE_FORMAT(orderTime, '%Y-%m'),						'2019-02'					) `time`				FROM					view_order_product_supplier				WHERE					DATE_FORMAT(orderTime, '%Y-%m') = '2019-02'			)		UNION			(				SELECT					ifnull(sum(total), 0) orderTotal,					ifnull(sum(productSPrice * count), 0) costTotal,					ifnull(						DATE_FORMAT(orderTime, '%Y-%m'),						'2019-03'					) `time`				FROM					view_order_product_supplier				WHERE					DATE_FORMAT(orderTime, '%Y-%m') = '2019-03'			)		UNION			(				SELECT					ifnull(sum(total), 0) orderTotal,					ifnull(sum(productSPrice * count), 0) costTotal,					ifnull(						DATE_FORMAT(orderTime, '%Y-%m'),						'2019-04'					) `time`				FROM					view_order_product_supplier				WHERE					DATE_FORMAT(orderTime, '%Y-%m') = '2019-04'			)		UNION			(				SELECT					ifnull(sum(total), 0) orderTotal,					ifnull(sum(productSPrice * count), 0) costTotal,					ifnull(						DATE_FORMAT(orderTime, '%Y-%m'),						'2019-05'					) `time`				FROM					view_order_product_supplier				WHERE					DATE_FORMAT(orderTime, '%Y-%m') = '2019-05'			)		UNION			(				SELECT					ifnull(sum(total), 0) orderTotal,					ifnull(sum(productSPrice * count), 0) costTotal,					ifnull(						DATE_FORMAT(orderTime, '%Y-%m'),						'2019-06'					) `time`				FROM					view_order_product_supplier				WHERE					DATE_FORMAT(orderTime, '%Y-%m') = '2019-06'			)		UNION			(				SELECT					ifnull(sum(total), 0) orderTotal,					ifnull(sum(productSPrice * count), 0) costTotal,					ifnull(						DATE_FORMAT(orderTime, '%Y-%m'),						'2019-07'					) `time`				FROM					view_order_product_supplier				WHERE					DATE_FORMAT(orderTime, '%Y-%m') = '2019-07'			)		UNION			(				SELECT					ifnull(sum(total), 0) orderTotal,					ifnull(sum(productSPrice * count), 0) costTotal,					ifnull(						DATE_FORMAT(orderTime, '%Y-%m'),						'2019-08'					) `time`				FROM					view_order_product_supplier				WHERE					DATE_FORMAT(orderTime, '%Y-%m') = '2019-08'			)		UNION			(				SELECT					ifnull(sum(total), 0) orderTotal,					ifnull(sum(productSPrice * count), 0) costTotal,					ifnull(						DATE_FORMAT(orderTime, '%Y-%m'),						'2019-09'					) `time`				FROM					view_order_product_supplier				WHERE					DATE_FORMAT(orderTime, '%Y-%m') = '2019-09'			)	) aGROUP BY	a.`time`ORDER BY	a.`time` ASC

将上面的语句查询结果如下:

希望带来启发。

转载于:https://my.oschina.net/capjes/blog/3051247

你可能感兴趣的文章
我是怎么招聘程序员的
查看>>
shell逻辑判断、文件属性判断、if特殊用法、case判断
查看>>
Jenkins在Windows下的安装与配置
查看>>
数据结构与算法之递归和分治思想
查看>>
CentOS 6.2安装配置LAMP服务器(Apache+PHP5+MySQL)
查看>>
今天进行的将zzb从apache迁移到nginx
查看>>
PHP缓存
查看>>
CentOS6.5 webserver---网络配置
查看>>
java学习笔记(3)
查看>>
IOS UIView直接响应点击事件的解决方法
查看>>
斯坦福NLP笔记6 —— Defining Minimum Edit Distance
查看>>
关于编辑区无法调用chekbox的问题
查看>>
VMware基础架构和运营管理
查看>>
爱不意味这“sorry”
查看>>
四、 vSphere 6.7 U1(四):部署VCSA
查看>>
apper安卓×××
查看>>
大型网站技术架构(一)大型网站架构演化
查看>>
Log4j 1使用教程
查看>>
如何将PDF转换成Word
查看>>
plusgantt的项目管理系统实战开发最全课程
查看>>