我有2个表所示:
表-A
id col2
1 A
1 B
2 A
2 B
3 B
表-B
id col1
1 X
2 Y
3 Z
我想加入这两个表,使得所得包含表-A的列COL2重复行值。每个ID将不包含多于3个table_a.col2值。在这个例子中,结果表是这样的:
结果:
id col1 col2 col3 col 4
1 X A B null
2 Y A B null
3 Z B null null
我怎样才能做到这一点?我知道我可以使用LISTAGG(),以所有的行聚合到这样的一列:
select b.id, b.col1,
listagg(a.col2, '_') within group (order by a.col2) as col2
from table_b b join
table_a a
on b.id = a.id
group by b.id, b.col1;
这会给我这样的结果:
id col1 col2
1 X A_B
2 Y A_B
3 Z B
您可以使用条件汇总:
select b.id, b.col1,
max(case when seqnum = 1 then a.col2 end) as col2,
max(case when seqnum = 2 then a.col2 end) as col3,
max(case when seqnum = 3 then a.col2 end) as col4
from table_b b left join
(select a.*,
row_number() over (partition by a.id order by a.col2) as seqnum
from table_a a
) a
on b.id = a.id
group by b.id, b.col1;