【问题标题】:Concatenating fields when BREAK ON command is used使用 BREAK ON 命令时连接字段
【发布时间】:2013-03-16 13:25:03
【问题描述】:

我已经构建了一个命令,该命令使用 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.value。

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

【问题讨论】:

    标签: sql oracle sqlplus string-aggregation


    【解决方案1】:

    您不是在寻找 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() 或用户定义的函数 STRAGG(),如 this useful page on string aggregation techniques 中所述。

    【讨论】:

    • 太棒了!非常感谢您的回复。我会试一试。谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-03-02
    • 2019-03-07
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 2015-12-23
    相关资源
    最近更新 更多