我确实有以下查询显示两个结果。
查询:
select /*+ parallel(16) */ * from CONTRACT where CONTRACT_ID ='1234';
结果:
_____________________________________________________________________________________
|CONTRACT_SOURCE | CONTRACT_ID | ROLE | ROLE_ID | STD_CD | INDEX
_____________________________________________________________________________________
|Source | 1234 | role_driver | unique1 | LOAD | 9
|Source | 1234 | role_insured| unique2 | LOAD | 9
_____________________________________________________________________________________
我想将这些结果合并到以下格式中。
_____________________________________________________________________________________________________________________
|CONTRACT_SOURCE | CONTRACT_ID | ROLE | ROLE_ID | ROLE | ROLE_ID | STD_CD | INDEX |
_____________________________________________________________________________________________________________________
|Source | 1234 | role_driver | unique1 | role_insured | unique2 | LOAD | 9 |
_____________________________________________________________________________________________________________________
我可以通过Oracle查询实现这一目标吗?
答案 0 :(得分:1)
您可以使用row_number和aggregation来获取所需的多列旋转:
select contract_source,
contract_id,
std_cd,
in,
max(case when rn = 1 then role end) as role_1,
max(case when rn = 1 then role_id end) as role_id_1,
max(case when rn = 2 then role end) as role_2,
max(case when rn = 2 then role_id end) as role_id_2
from (
select c.*,
row_number() over (
partition by contract_source, contract_id, std_cd, in
order by role_id
) as rn
from contract c
) t
group by contract_source, contract_id, std_cd, in