使用BREAK ON命令时连接字段

时间:2013-03-16 13:25:04

标签: sql oracle sqlplus string-aggregation

我已经构建了一个使用BREAK ON命令停止输出重复字段名称的命令。例如:

f.name | f.value
f.name | f.value
f.name | f.value

变为:

f.name | f.value
       | f.value
       | f.value

有没有办法让这个输出为:

f.name | f.value,f.value,f.value

在某些情况下,f.name字段与其关联的超过20个f.values。

输出最终将用于导入到其他地方,所以我试图使输出尽可能友好。

1 个答案:

答案 0 :(得分:2)

您不是在寻找SQL * Plus命令,而是在寻找字符串聚合。

假设您当前的查询是:

select name, value from my_table

您可以按照以下方式更改它以获得所需的结果。包含DISTINCT以消除列表中的重复结果。

select name, listagg(value, ', ') within group (order by value) as value
  from ( select distinct name, value from my_table )
 group by name

LISTAGG()仅在11.2中发布,如果您使用的是早期版本的Oracle,则可以使用未记录的函数WM_CONCAT()或this useful page on string aggregation techniques中概述的用户定义函数STRAGG()。