Mysql 刷题笔记 1.19 将每个客户按月生成汇总报表

Mysql 刷题笔记

-- 1.19将每个客户按月生成汇总报表,用SQL该如何求解?

Create table T0119C(
  	客户编号 varchar(24),
	客户抬头 varchar(23)
);
Insert INTO T0119C VALUES('0001','A公司');
Insert INTO T0119C VALUES('0002','B公司');
Insert INTO T0119C VALUES('0003','C公司');

Create table T0119X(
	客户编号 varchar(24),
	日期 Date,
	金额 int
);

Insert INTO T0119X VALUES('0001','2018-9-12',2000);
Insert INTO T0119X VALUES('0001','2018-9-16',1500);
Insert INTO T0119X VALUES('0001','2018-10-23',3000);
Insert INTO T0119X VALUES('0002','2018-9-15',3200);
Insert INTO T0119X VALUES('0002','2018-10-19',5000);


Create table T0119Y(
	客户编号 varchar(24),
	日期 Date,
	金额 int
);

Insert INTO T0119Y VALUES('0001','2018-9-12',12000);
Insert INTO T0119Y VALUES('0001','2018-10-16',10000);
Insert INTO T0119Y VALUES('0001','2018-10-23',20000);
Insert INTO T0119Y VALUES('0002','2018-11-15',13200);
Insert INTO T0119Y VALUES('0002','2018-10-19',25000);

T0119C
+--------------+--------------+
| 客户编号     | 客户抬头     |
+--------------+--------------+
| 0001         | A公司        |
| 0002         | B公司        |
| 0003         | C公司        |
+--------------+--------------+
T0119X
+--------------+------------+--------+
| 客户编号     | 日期       | 金额   |
+--------------+------------+--------+
| 0001         | 2018-09-12 |   2000 |
| 0001         | 2018-09-16 |   1500 |
| 0001         | 2018-10-23 |   3000 |
| 0002         | 2018-09-15 |   3200 |
| 0002         | 2018-10-19 |   5000 |
+--------------+------------+--------+
T0119Y
+--------------+------------+--------+
| 客户编号     | 日期       | 金额   |
+--------------+------------+--------+
| 0001         | 2018-09-12 |  12000 |
| 0001         | 2018-10-16 |  10000 |
| 0001         | 2018-10-23 |  20000 |
| 0002         | 2018-11-15 |  13200 |
| 0002         | 2018-10-19 |  25000 |
+--------------+------------+--------+

结果
+---------+--------------+---------------+---------------+
| 日期    | 客户抬头     | X业务金额     | Y业务金额     |
+---------+--------------+---------------+---------------+
| 2018-09 | A公司        |          3500 |         12000 |
| 2018-09 | B公司        |          3200 |          NULL |
| 2018-10 | A公司        |          3000 |         30000 |
| 2018-10 | B公司        |          5000 |         25000 |
| 2018-11 | B公司        |          NULL |         13200 |
+---------+--------------+---------------+---------------+

SELECT DATE_FORMAT(t.业务日期,'%Y-%m') 日期,c.客户抬头,
SUM(t.x业务金额) AS X业务金额 ,SUM(t.y业务金额) AS Y业务金额
FROM
(	
	SELECT x.客户编号,x.日期 业务日期,x.金额 x业务金额,y.金额 y业务金额 
	FROM t0119x x LEFT JOIN t0119y y 
	ON x.客户编号 = y.客户编号 AND x.日期 = y.日期    
	UNION    
	SELECT y.客户编号,y.日期 业务日期,x.金额 x业务金额,y.金额 y业务金额 
	FROM t0119x x RIGHT JOIN t0119y y
	ON x.客户编号 = y.客户编号 AND x.日期 = y.日期
)t 
INNER JOIN t0119c c ON t.客户编号 = c.客户编号 
GROUP BY 日期,t.客户编号
ORDER BY 日期
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值