PHP Mysql如果月份相同,如何在相同的行中获得结果
我有大麻烦了,我需要你的帮助,我有两张桌子,一张是销售桌,另一张是恢复桌。我的要求是获得月度报告,因此我在使用Union All的查询中使用date_格式,其工作正常,但问题是,如果月份相同,它将在不同的销售和回收行中显示结果 销售: 恢复:PHP Mysql如果月份相同,如何在相同的行中获得结果,mysql,sql,Mysql,Sql,我有大麻烦了,我需要你的帮助,我有两张桌子,一张是销售桌,另一张是恢复桌。我的要求是获得月度报告,因此我在使用Union All的查询中使用date_格式,其工作正常,但问题是,如果月份相同,它将在不同的销售和回收行中显示结果 销售: 恢复: ID(unique) Party Amount Recovery_Date 1 95 1000 01-06-2017 2 97 2000 20-06-2017
ID(unique) Party Amount Recovery_Date
1 95 1000 01-06-2017
2 97 2000 20-06-2017
3 95 3500 10-07-2017
4 97 900 10-07-2017
5 99 1500 15-08-2017
我希望得到每月的结果,所以我在UNIONALL查询中使用DATE\ U格式。下面是我正在使用的查询
"SELECT SUM(amount) as sale_amount, DATE_FORMAT(Sale_Date, '%M %Y'),
null as recovery_amount FROM
`SALE` GROUP BY DATE_FORMAT(Sale_Date, '%M %Y')
UNION ALL
"SELECT null as sale_amount, DATE_FORMAT(Sale_Date, '%M %Y'),
SUM(amount) as recovery_amount FROM
`SALE` GROUP BY DATE_FORMAT(Sale_Date, '%M %Y')
结果:
S.No Month Sale Recovery Balance
1 May-2017 5000 5000
2 June-2017 3000 3000
3 June-2017 3000 -3000
4 July-2017 1000 1000
5 July-2017 4400 -4400
6 Aug-2017 1500 -1500
S.No Month Sale Recovery Balance
1 May-2017 5000 5000
2 June-2017 3000 3000 0
3 July-2017 1000 4400 -3300
4 Aug-2017 1500 -1500
上面的结果是好的,但我需要以下格式的结果,以获得正确的余额金额
预期结果:
S.No Month Sale Recovery Balance
1 May-2017 5000 5000
2 June-2017 3000 3000
3 June-2017 3000 -3000
4 July-2017 1000 1000
5 July-2017 4400 -4400
6 Aug-2017 1500 -1500
S.No Month Sale Recovery Balance
1 May-2017 5000 5000
2 June-2017 3000 3000 0
3 July-2017 1000 4400 -3300
4 Aug-2017 1500 -1500
您必须通过将联合的结果移动到子查询中来聚合它:
Select year_month, sum(sale_amount) as sale_amount, sum(recover_amount) as recovery_amount, sum(sale_amount)-sum(recovery_amount) as balance
From (
SELECT SUM(amount) as sale_amount, DATE_FORMAT(Sale_Date, '%M %Y') as year_month, null as recovery_amount
FROM `SALE` GROUP BY DATE_FORMAT(Sale_Date, '%M %Y')
UNION ALL
SELECT null as sale_amount, DATE_FORMAT(recovery_Date, '%M %Y'), SUM(amount) as recovery_amount
FROM `recovery` GROUP BY DATE_FORMAT(recovery_Date, '%M %Y')) as t
Group by year_month
不幸的是,mysql不支持完全的外部联接,因此具有上述优点。您必须通过将联合的结果移动到子查询中来聚合它:
Select year_month, sum(sale_amount) as sale_amount, sum(recover_amount) as recovery_amount, sum(sale_amount)-sum(recovery_amount) as balance
From (
SELECT SUM(amount) as sale_amount, DATE_FORMAT(Sale_Date, '%M %Y') as year_month, null as recovery_amount
FROM `SALE` GROUP BY DATE_FORMAT(Sale_Date, '%M %Y')
UNION ALL
SELECT null as sale_amount, DATE_FORMAT(recovery_Date, '%M %Y'), SUM(amount) as recovery_amount
FROM `recovery` GROUP BY DATE_FORMAT(recovery_Date, '%M %Y')) as t
Group by year_month
不幸的是,mysql不支持完全的外部连接,因此上面有这样的优点。如何?你能帮我创建这个查询吗?你能帮我创建一个查询吗。