Mysql 刷题笔记
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 日期