我已经构建了一个使用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。
输出最终将用于导入到其他地方,所以我试图使输出尽可能友好。
答案 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()。