2017-05-18 96 views
1

我很麻烦,我需要你的帮助,我有两个表的销售和恢复。我的要求是获得明智的报告月份,所以我在Union All查询时使用了date_format,它的工作正常,但问题是如果月份相同,问题在于它显示不同行销售和恢复的结果。PHP Mysql如何在相同的行中获得结果如果月份相同

售:

ID(unique) Party Amount Sale_Date 
1   95  1500  01-05-2017 
2   97  3500  15-05-2017 
3   95  2500  05-06-2017 
4   97  500  10-06-2017 
5   99  1000  01-07-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 

我想要得到的结果一个月明智的,所以我使用DATE_FORMAT与UNION ALL查询。下面是我正在使用的查询。

"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 
+0

怎么样?你能为我创建查询吗? –

回答

0

你哈已经通过移动它变成一个子查询汇总resultsof工会:

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不支持完全外部联接,因此上面这个美女。

+0

其工作,谢谢 –

相关问题