我有两张桌子:
table1 : test1 desc test1 empcode number(6) qualification_code number(2) table2 :test2 desc test2 qualification_code number(2) qualification_name varchar2(10)
select * from test1
120633 10 120633 20 120633 30
select * from test2
10 BSC 20 MCA 30 MBA
我想从两个表中选择,我希望得到输出:
empcode :120633 Qualification : BSC,MCA,MBA
如何获得以上输出。
答案 0 :(得分:0)
当我用Google搜索" oracle从sql"创建列表时,我找到了ListAgg。在你的情况下,你会想要这样的东西:
select empcode
, ListAgg(qualification_name, ',')
within group (order by empcode) qualifications
from test1 join test2 on test1.qualification_code = test2.qualification_code
group by empcode
我不知道这一点,但我觉得它很漂亮。
答案 1 :(得分:0)
如果您使用的是Oracle 11或更高版本,则可以使用LISTAGG
功能,如下所示:
select empcode
, listagg(qualification_name, ',')
within group (order by qualification_name) as names
from test1
join test2
on test2.qualification_code=test1.qualification_code
group by empcode
答案 2 :(得分:0)
你也可以使用COLLECT
select empcode , collect(qualification_name) as qualifications
from test1 , test2
where test1.qualification_code = test2.qualification_code
group by empcode
您还可以使用用户定义的集合类型 - 在使用PL / SQL时非常有用。
检查this(非常好的博客)