我有两个表,我需要这两个表中的记录。
查询 1
SELECT SUM(rec_issued) AS issed,
regen_id,
YEAR(issue_date) AS iYear,
MONTH(issue_date) AS iMonth
FROM `view_rec_issued`
WHERE `regen_id` = 2
GROUP BY YEAR(issue_date) DESC, MONTH(issue_date) DESC
ORDER BY issue_date ASC
给出这个结果:
| issed | regen_id | iYear | iMonth |
-------------------------------------
| 424 | 2 | 2011 | 3 |
| 4340 | 2 | 2011 | 4 |
| 4235 | 2 | 2011 | 5 |
| 10570 | 2 | 2012 | 2 |
| 4761 | 2 | 2012 | 3 |
| 5000 | 2 | 2012 | 4 |
| 3700 | 2 | 2012 | 5 |
| 3414 | 2 | 2012 | 6 |
| 3700 | 2 | 2012 | 7 |
| 2992 | 2 | 2012 | 8 |
| 995 | 2 | 2012 | 10 |
查询 2
SELECT SUM(total_redem) AS redemed,
regen_id,
YEAR(redemption_date) AS rYear,
MONTH(redemption_date) AS rMonth
FROM `recredem_month_wise`
WHERE `regen_id` = 2
GROUP BY YEAR(redemption_date) DESC, MONTH(redemption_date) DESC
order by redemption_date ASC
给出这个结果:
| redemed | regen_id | rYear | rMonth |
---------------------------------------
| 424 | 2 | 2011 | 3 |
| 260 | 2 | 2011 | 4 |
| 6523 | 2 | 2011 | 5 |
| 1070 | 2 | 2011 | 6 |
| 200 | 2 | 2011 | 10 |
| 500 | 2 | 2011 | 11 |
| 9750 | 2 | 2012 | 2 |
| 5000 | 2 | 2012 | 3 |
| 5500 | 2 | 2012 | 4 |
| 3803 | 2 | 2012 | 5 |
| 3700 | 2 | 2012 | 7 |
| 3000 | 2 | 2012 | 8 |
期望的结果
但我想要这样:
| issed | regen_id | iYear | iMonth | redemed | regen_id | rYear | rMonth |
-------------------------------------------------------------------------------
| 424 | 2 | 2011 | 3 | 424 | 2 | 2011 | 3 |
| 4340 | 2 | 2011 | 4 | 260 | 2 | 2011 | 4 |
| 4235 | 2 | 2011 | 5 | 6523 | 2 | 2011 | 5 |
| NULL | NULL | NULL | NULL | 1070 | 2 | 2011 | 6 |
| NULL | NULL | NULL | NULL | 200 | 2 | 2011 | 10 |
| NULL | NULL | NULL | NULL | 500 | 2 | 2011 | 11 |
| 10570 | 2 | 2012 | 2 | 9750 | 2 | 2012 | 2 |
| 4761 | 2 | 2012 | 3 | 5000 | 2 | 2012 | 3 |
| 5000 | 2 | 2012 | 4 | 5500 | 2 | 2012 | 4 |
| 3700 | 2 | 2012 | 5 | 3803 | 2 | 2012 | 5 |
| 3414 | 2 | 2012 | 6 | NULL | NULL | NULL | NULL |
| 3700 | 2 | 2012 | 7 | 3700 | 2 | 2012 | 7 |
| 2992 | 2 | 2012 | 8 | 3000 | 2 | 2012 | 8 |
| 995 | 2 | 2012 | 10 | NULL | NULL | NULL | NULL |
在这些表中regen_id
是唯一的,我需要数据YEAR
和MONTH
. 如果一个表在特定月份和年份中没有任何记录,那么它应该检索零或NULL
。
但在每一个创纪录的年份和月份都应该像这样 -
iYear = rYear and iMonth = rMonth
所以我们可以合并两个字段 - 不需要显示年份和月份两次
iYear and rYear = year
iMonth and rMonth = month
更新
我试过这个查询,几乎解决了这个问题,但记录不是以“YEAR DESC,MONTH DESC”的形式排序的。
SELECT DISTINCT A.issed, A.regen_id, A.iYear AS yrs, A.iMonth AS mnt, B.redemed, B.regen_id, B.rYear AS yrs, B.rMonth AS mnt
FROM(SELECT SUM(rec_issued) AS issed, regen_id, YEAR(issue_date) AS iYear, MONTH(issue_date) AS iMonth
FROM `view_rec_issued`
WHERE `regen_id` = 2
GROUP BY YEAR(issue_date) DESC, MONTH(issue_date) DESC
ORDER BY issue_date ASC) AS A
LEFT JOIN
(SELECT SUM(total_redem) AS redemed, regen_id, YEAR(redemption_date) AS rYear, MONTH(redemption_date) AS rMonth
FROM `recredem_month_wise`
WHERE `regen_id` = 2
GROUP BY YEAR(redemption_date) DESC, MONTH(redemption_date) DESC
ORDER BY redemption_date ASC) AS B ON A.iYear = B.rYear AND A.iMonth = B.rMonth
UNION
SELECT DISTINCT A.issed, A.regen_id, A.iYear AS yrs, A.iMonth AS mnt, B.redemed, B.regen_id, B.rYear AS yrs, B.rMonth AS mnt
FROM(SELECT SUM(rec_issued) AS issed, regen_id, YEAR(issue_date) AS iYear, MONTH(issue_date) AS iMonth
FROM `view_rec_issued`
WHERE `regen_id` = 2
GROUP BY YEAR(issue_date) DESC, MONTH(issue_date) DESC
ORDER BY issue_date ASC) AS A
RIGHT JOIN
(SELECT SUM(total_redem) AS redemed, regen_id, YEAR(redemption_date) AS rYear, MONTH(redemption_date) AS rMonth
FROM `recredem_month_wise`
WHERE `regen_id` = 2
GROUP BY YEAR(redemption_date) DESC, MONTH(redemption_date) DESC
ORDER BY redemption_date ASC) AS B ON A.iYear = B.rYear AND A.iMonth = B.rMonth