我不知道为什么你没有得到预期的输出,除非是因为你没有在ext.fy = exp.fy中加入连接?
这个工作对我来说:
with projects as (select 1 proj_id, 123.45 project_cost, 'construction plan A' project_description from dual union all
select 2 proj_id, 222.22 project_cost, 'construction plan B' project_description from dual union all
select 3 proj_id, 333.33 project_cost, 'construction plan C' project_description from dual union all
select 4 proj_id, 444.44 project_cost, 'construction plan D' project_description from dual union all
select 5 proj_id, 555.55 project_cost, 'construction plan E' project_description from dual),
project_estimates as (select 1 est_id, 2 proj_id, '2015-16' fy, 12 q1, 11 q2, 15 q3, 19 q4 from dual union all
select 2 est_id, 3 proj_id, '2015-16' fy, 11 q1, 22 q2, 45 q3, 23 q4 from dual union all
select 3 est_id, 4 proj_id, '2015-16' fy, 31 q1, 32 q2, 36 q3, 59 q4 from dual union all
select 4 est_id, 1 proj_id, '2015-16' fy, 51 q1, 34 q2, 34 q3, 78 q4 from dual union all
select 5 est_id, 5 proj_id, '2015-16' fy, 33 q1, 44 q2, 44 q3, 98 q4 from dual union all
select 6 est_id, 1 proj_id, '2016-17' fy, 33 q1, 44 q2, 44 q3, 98 q4 from dual),
project_expenditures as (select 1 exp_id, 3 proj_id, '2015-16' fy, 10 q1, 12 q2, 41 q3, 15 q4 from dual union all
select 2 exp_id, 5 proj_id, '2015-16' fy, 31 q1, 24 q2, 39 q3, 70 q4 from dual)
--end of mimicking your tables; see the query below:
select est.fy,
prj.proj_id,
est.q1 proposed_q1,
est.q2 proposed_q2,
est.q3 proposed_q3,
est.q4 proposed_q4,
exp.q1 expenditure_q1,
exp.q2 expenditure_q2,
exp.q3 expenditure_q3,
exp.q4 expenditure_q4
from projects prj
left outer join project_estimates est on (prj.proj_id = est.proj_id)
left outer join project_expenditures exp on (prj.proj_id = exp.proj_id and est.fy = exp.fy)
order by fy, proj_id;
FY PROJ_ID PROPOSED_Q1 PROPOSED_Q2 PROPOSED_Q3 PROPOSED_Q4 EXPENDITURE_Q1 EXPENDITURE_Q2 EXPENDITURE_Q3 EXPENDITURE_Q4
------- ---------- ----------- ----------- ----------- ----------- -------------- -------------- -------------- --------------
2015-16 1 51 34 34 78
2015-16 2 12 11 15 19
2015-16 3 11 22 45 23 10 12 41 15
2015-16 4 31 32 36 59
2015-16 5 33 44 44 98 31 24 39 70
2016-17 1 33 44 44 98
如果您还可能有没有估算支出,那么这应该做的伎俩:
with projects as (select 1 proj_id, 123.45 project_cost, 'construction plan A' project_description from dual union all
select 2 proj_id, 222.22 project_cost, 'construction plan B' project_description from dual union all
select 3 proj_id, 333.33 project_cost, 'construction plan C' project_description from dual union all
select 4 proj_id, 444.44 project_cost, 'construction plan D' project_description from dual union all
select 5 proj_id, 555.55 project_cost, 'construction plan E' project_description from dual),
project_estimates as (select 1 est_id, 2 proj_id, '2015-16' fy, 12 q1, 11 q2, 15 q3, 19 q4 from dual union all
select 2 est_id, 3 proj_id, '2015-16' fy, 11 q1, 22 q2, 45 q3, 23 q4 from dual union all
select 3 est_id, 4 proj_id, '2015-16' fy, 31 q1, 32 q2, 36 q3, 59 q4 from dual union all
select 4 est_id, 1 proj_id, '2015-16' fy, 51 q1, 34 q2, 34 q3, 78 q4 from dual union all
select 5 est_id, 5 proj_id, '2015-16' fy, 33 q1, 44 q2, 44 q3, 98 q4 from dual union all
select 6 est_id, 1 proj_id, '2016-17' fy, 33 q1, 44 q2, 44 q3, 98 q4 from dual),
project_expenditures as (select 1 exp_id, 3 proj_id, '2015-16' fy, 10 q1, 12 q2, 41 q3, 15 q4 from dual union all
select 2 exp_id, 5 proj_id, '2015-16' fy, 31 q1, 24 q2, 39 q3, 70 q4 from dual union all
select 3 exp_id, 4 proj_id, '2016-17' fy, 31 q1, 24 q2, 39 q3, 70 q4 from dual)
--end of mimicking your tables; see the query below:
select coalesce(exp.fy, est.fy) fy,
coalesce(exp.proj_id, est.proj_id, prj.proj_id) proj_id,
est.q1 proposed_q1,
est.q2 proposed_q2,
est.q3 proposed_q3,
est.q4 proposed_q4,
exp.q1 expenditure_q1,
exp.q2 expenditure_q2,
exp.q3 expenditure_q3,
exp.q4 expenditure_q4
from projects prj
left outer join project_estimates est on (prj.proj_id = est.proj_id)
full outer join project_expenditures exp on (prj.proj_id = exp.proj_id and est.fy = exp.fy)
order by fy, proj_id;
FY PROJ_ID PROPOSED_Q1 PROPOSED_Q2 PROPOSED_Q3 PROPOSED_Q4 EXPENDITURE_Q1 EXPENDITURE_Q2 EXPENDITURE_Q3 EXPENDITURE_Q4
------- ---------- ----------- ----------- ----------- ----------- -------------- -------------- -------------- --------------
2015-16 1 51 34 34 78
2015-16 2 12 11 15 19
2015-16 3 11 22 45 23 10 12 41 15
2015-16 4 31 32 36 59
2015-16 5 33 44 44 98 31 24 39 70
2016-17 1 33 44 44 98
2016-17 4 31 24 39 70
您能否提供您的SQL语句及其执行结果? –