我将如何重构此查询以相应地排列数据?

问题描述

select distinct
a.contcode,decode(d.period,1,d.factor)"1YR",2,d.factor)"2YR",3,d.factor)"3YR",4,d.factor)"4YR",5,d.factor)"5YR"
from contlink a
join plans b on a.plangrp = b.plangrp
join earnings_account_classes c on a.contcode = c.account_class_code
join earnings_factors d on c.account_class_id = d.account_class_id
where b.program in ('AT','EIPP','RUP','WP','CW','MCK','PDR','TW','WR','WRR')
and b.term in (12,24,36,48,60,72,84,96,108,120)
and a.end_date is null
order by 1;

目前的数据如下所示:

CONTCODE 1YR 2YR 3YR 4YR 5YR
A01 8.33
A03 4.56
A03 3.78
A05 2.75
A05 3.26
A05 2.33
A07 2.42
A07 2.69
A07 2.23
A07 0.99
A09 2.37
A09 2.32
A09 1.80
A09 1.21
A09 0.65

我需要它看起来像这样:

CONTCODE 1YR 2YR 3YR 4YR 5YR
A01 8.33
A03 4.56 3.78
A05 2.75 3.26 2.33
A07 2.42 2.69 2.23 0.99
A09 2.37 2.32 1.80 1.21 0.65

请指教。

解决方法

也许是这样的:

select distinct
a.contcode,sum(decode(d.period,1,d.factor))"1YR",2,d.factor))"2YR",3,d.factor))"3YR",4,d.factor))"4YR",5,d.factor))"5YR"
...
group by a.contcode
order by 1;

鲍比