在11gR2中,你可以使用listAgg
with person as
(
select 1 id_person, 'Jack Black' FullName from dual
union all
select 2 id_person, 'Joe White' FullName from dual
)
, telephone as
(
select 5 id_telephone , 1 Id_person, 333222111 phone_Number , 'Mobile' phone_type from dual
union all
select 6 id_telephone , 1 Id_person, 444333222 phone_Number , 'Fax' phone_type from dual
union all
select 7 id_telephone , 2 Id_person, 555444333 phone_Number , 'Mobile' phone_type from dual
)
select person.FullName
,listagg(telephone.phone_type || ': ' || telephone.phone_number , ', ') within group (order by person.FullName) personToPhone
from person
inner join
telephone
on person.id_person = telephone.id_person
group by person.FullName ;
FULLNAME PERSONTOPHONE
---------- -----------------------------------
Jack Black Fax: 444333222, Mobile: 333222111
Joe White Mobile: 555444333
看這個問題的其他解決辦法, comma-separated list as a result of select statement in Oracle
編輯
的10G您可以使用XMLAGG
with person as
(
select 1 id_person, 'Jack Black' FullName from dual
union all
select 2 id_person, 'Joe White' FullName from dual
)
, telephone as
(
select 5 id_telephone , 1 Id_person, 333222111 phone_Number , 'Mobile' phone_type from dual
union all
select 6 id_telephone , 1 Id_person, 444333222 phone_Number , 'Fax' phone_type from dual
union all
select 7 id_telephone , 2 Id_person, 555444333 phone_Number , 'Mobile' phone_type from dual
)
select person.FullName
,RTRIM(XMLAGG(XMLELEMENT(e,telephone.phone_type || ': ' || telephone.phone_number || ',')).EXTRACT('//text()'),',') AS TelephoneToType
from person
inner join
telephone
on person.id_person = telephone.id_person
group by person.FullName ;
FULLNAME TELEPHONETOTYPE
---------- ---------------------------------
Jack Black Mobile: 333222111,Fax: 444333222
Joe White Mobile: 555444333
(馬克·貝克在鏈接的SO問題所做的那樣)
什麼約10克? – sanjuro 2011-03-17 19:36:27
@sanjuro在 – Harrison 2011-03-17 19:47:29