【发布时间】:2012-09-15 12:40:04
【问题描述】:
可能重复:
how to retrieve two columns data in A,B format in Oracle
假设我有这样一张桌子:
NAME GROUP_NAME
name1 groupA
name2 groupB
name5 groupC
name4 groupA
name3 groupC
我想要这样的结果:
GROUP_NAME NAMES
groupA name1,name4
groupB name2
groupC name3,name5
如果表中只有一列,我可以通过执行以下操作来连接记录,但是在上下文中进行分组,我真的没有太多想法。
连接一个列表:
SELECT names
FROM (SELECT SYS_CONNECT_BY_PATH(names,' ') names, level
FROM name_table
START WITH names = (SELECT names FROM name_table WHERE rownum = 1)
CONNECT BY PRIOR names < names
ORDER BY level DESC)
WHERE rownum = 1
更新:
我现在有了使用LISTAGG的解决方案:
SELECT
group_name,
LISTAGG(name, ', ')
WITHIN GROUP (ORDER BY GROUP) "names"
FROM name_table
GROUP BY group_name
当LISTAGG 不可用时,仍然对更“通用”的解决方案感兴趣。
【问题讨论】:
-
您使用的是什么版本的 Oracle?可用选项取决于 Oracle 版本。
-
如果你想用通用的东西,你应该写自己的聚合函数docs.oracle.com/cd/B28359_01/appdev.111/b28425/…可以帮助
标签: sql oracle concatenation grouping group-concat