通过Oracle连接

Sai*_*oon 4 sql oracle oracle10g string-aggregation

这是一个示例表数据

Fruit   Number
Apple    1
Apple    2
Apple    3
Kiwi     6
Kiwi     10
Run Code Online (Sandbox Code Playgroud)

我尝试连接表列值以获得以下内容

Fruit   Number
Apple    1-2-3
Kiwi     6-10
Run Code Online (Sandbox Code Playgroud)

有没有办法查询这个或存储过程?像Concatenate over(partition by)之类的东西,我对存储过程知之甚少.谢谢!

smn*_*brv 6

您不需要存储过程.使用listagg功能:

select fruit, listagg(number, ',') within group (order by number)
from mytable
group by fruit
Run Code Online (Sandbox Code Playgroud)

如果您的数据库版本是10g,它仍然很简单:使用WM_CONCAT(如果无法识别名称可能尝试WMSYS.WM_CONCAT)功能,请参阅答案中的示例.如果你需要使用不同的分隔符,,你可以将结果包装在replace函数中; 如果你想订购结果只是在子查询中预先订购,例如:

select fruit, replace(wm_concat(number), ',', '-')
from (select fruit, number
      from mytable
      order by number)
group by fruit
Run Code Online (Sandbox Code Playgroud)

如果你对某些神秘的原因没有在您的实例可以使用的功能填充工具,请参阅我的答案在这里.