如何在PLSQL中获取分组输出

时间:2013-02-09 16:10:11

标签: sql oracle string-aggregation

我有两张桌子:

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

如何获得以上输出。

3 个答案:

答案 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(非常好的博客)