2013-03-16 55 views
2

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

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

变为:

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

有什么办法有这样的输出:有有超过20架F

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

在某些情况下,f.name领域。与之相关的价值。

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

回答

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的早期版本,你可以使用在this useful page on string aggregation techniques列出的未公开的函数WM_CONCAT()或用户定义的函数STRAGG()。

+0

太棒了!非常感谢您的回复。我会放弃这一点。谢谢 – 2013-03-16 13:32:05