如果你在Oracle 11g或更高版本,可以使用LISTAGG
:
with table_a as (select 1 id_a, 'texta' textdata from dual union all
select 2 id_a, 'textb' textdata from dual union all
select 3 id_a, 'textc' textdata from dual),
table_b as (select 1 id_b, 1 id_a, 1 id_c from dual union all
select 2 id_b, 1 id_a, 2 id_c from dual union all
select 3 id_b, 1 id_a, 4 id_c from dual union all
select 4 id_b, 2 id_a, 2 id_c from dual union all
select 5 id_b, 2 id_a, 3 id_c from dual union all
select 6 id_b, 2 id_a, 5 id_c from dual union all
select 7 id_b, 3 id_a, 1 id_c from dual union all
select 8 id_b, 3 id_a, 4 id_c from dual union all
select 9 id_b, 3 id_a, 5 id_c from dual),
table_c as (select 1 id_c, 'text1' textdata from dual union all
select 2 id_c, 'text2' textdata from dual union all
select 3 id_c, 'text3' textdata from dual union all
select 4 id_c, 'text8' textdata from dual union all
select 5 id_c, 'text9' textdata from dual)
-- end of mimicking your tables; see sql below.
select a.id_a,
a.textdata,
listagg(c.textdata, ', ') within group (order by c.id_c) data_c
from table_a a
inner join table_b b on (a.id_a = b.id_a)
inner join table_c c on (b.id_c = c.id_c)
group by a.id_a, a.textdata;
ID_A TEXTDATA DATA_C
---------- -------- --------------------
1 texta text1, text2, text8
2 textb text2, text3, text9
3 textc text1, text8, text9
您可以請張貼一些樣本數據和期望的結果嗎? – Aleksej
@Aleksej請檢查編輯帖子,謝謝。 – user3505775
您使用的是哪個版本的Oracle? – Boneist