如何从Oracle中取出以逗号分隔的行

时间:2012-07-16 07:16:30

标签: sql oracle

这就是我得到的

parent   MenuName Name     menu2    type      menuId   menu2Id
--------------------------------------------------------------
26  General Currency    Add 3   27  29
26  General Currency    Delete  3   27  31
26  General Currency    Update  3   27  30
26  General Currency    View    3   27  28
26  General Country Add 3   32  34
26  General Country Delete  3   32  36
26  General Country Update  3   32  35

我希望得到这样的

MenuId   MenuName   Name       Privilege
------------------------------------------------
27       General    Currency   Add,Delete,Update,View
32       General    Country    Add,Delete,Update

请帮助解决此问题

提前谢谢。

3 个答案:

答案 0 :(得分:1)

您没有说明您的版本,因此我假设当前版本(11.2):

select menuid, menuname, name, listagg(privilege, ',')
from menu
group by menuid, menuname, name

答案 1 :(得分:1)

您可以使用listagg功能,例如关注 -

select MenuId,
       MenuName,
       Name, 
       listagg(menu2,',') within group (order by 1) Privilege
from table_name
group by MenuId,MenuName,Name

for reference

答案 2 :(得分:1)

如果您没有使用oracle 11gR2,那么还有其他方法 - 阅读here

和XMLAGG方式:

select menuid, menuname, name, trim(xmlagg(xmlelement(e, privilege || ','))
              .extract('//text()')) Privilege
from table_name
group by MenuId,MenuName,Name