如何把这查询出来的数据组合起来

3句sql 查出的数据是下面3个图,查出的结果像最下图那样sql 要怎么写,求大佬帮忙

select year(reportDate)yearVal,count(*)absNumber
from abs_abuse a
left join bs_region r on(r.mainId = a.regionId)
GROUP BY year(reportDate)

select year(reportDate)yearVal,count(*)mdrNumber
from mdr_case_report m
left join bs_region r on(r.mainId = m.regionId)
GROUP BY year(reportDate)

select year(reportDate)yearVal,count(*)adrNumber
from adr_report re
left join bs_region r on(r.mainId = re.regionId)
GROUP BY year(reportDate)

img

img

img

img

将两张表关联查询,yearVal作为关联字段。reportDate字段来自于哪张表,其实没必要这么复杂,四张表关联查询就可以得到你要的数据。因为你每个查询中只是主表不同,其他的完全一样。

如有帮助,请采纳。

直接在你写的sql中修改的:

select a.yearVal,a.absNumber,b.mdrNumber,c.adrNumber 
from

(select year(reportDate)yearVal,count(*)mdrNumber
from mdr_case_report m
left join bs_region r on(r.mainId = m.regionId)
GROUP BY year(reportDate)) b

left join
(select year(reportDate)yearVal,count(*)absNumber
from abs_abuse a
left join bs_region r on(r.mainId = a.regionId)
GROUP BY year(reportDate)) a
on b.yearVal=a.yearVal

left join
(select year(reportDate)yearVal,count(*)adrNumber
from adr_report re
left join bs_region r on(r.mainId = re.regionId)
GROUP BY year(reportDate)) c
on b.yearVal=c.yearVal

每个sql中间用
union all 连接

1, 你不能用left join, 除非你确认第一个表的year年份,是最完整的。 否则会丢数据,比如第二个表有1988年的。
2、那就只能用full outer join
这就涉及到,year这个数据,怎么选择了,你可以 nvl(T1,nvl(t2,t3)) 这样, 也就是如果T1是空,那就T2, 还是空,那就T3