sql - 通过 Oracle 连接

标签 sql oracle oracle10g string-aggregation

这是一个示例表数据

Fruit   Number
Apple    1
Apple    2
Apple    3
Kiwi     6
Kiwi     10

我尝试连接表列值以获得以下内容
Fruit   Number
Apple    1-2-3
Kiwi     6-10

有没有办法查询这个或存储过程?
像 Concatenate over(partition by) 之类的东西,我对存储过程不太了解。谢谢!

最佳答案

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

select fruit, listagg(number, ',') within group (order by number)
from mytable
group by fruit

如果您的数据库版本是 10g 仍然很简单:使用 WM_CONCAT (如果不识别名称可能尝试 WMSYS.WM_CONCAT )函数,请参见 this 中的示例回答。以防万一您需要使用与 , 不同的分隔符,您可以将结果包装在 replace 中功能;如果您想对结果进行排序,只需在子查询中对其进行预排序,例如:
select fruit, replace(wm_concat(number), ',', '-')
from (select fruit, number
      from mytable
      order by number)
group by fruit

如果您出于某种神秘原因在您的实例中没有该功能,您可以使用 polyfill,请参阅我的回答 here .

关于sql - 通过 Oracle 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32356688/

相关文章:

sql - 如何在 Rails + Postgres 中重命名 hstore 键

sql - 嵌套的 SQL 查询搜索错误的表 (postgreSQL)

java - java.lang.ClassCastException : oracle. xdb.XMLType 与 oracle.sql.OPAQUE 不兼容的任何建议解决方案

sql - 表锁会加速 Oracle 10g 企业版中的更新语句吗?

php - 如何将 IN 子句的一组值传递给 pg_execute() 数组

mysql - 选择删除分类广告最多的用户以及分类广告数量

sql - sql 语句的哈希值

java - Camel 消耗队列中的消息但无法重新创建它

oracle - 如何获取两个日期之间的工作日或小时数

c# - 哪种 .NET 数据类型最适合在 NHibernate 中映射 NUMBER Oracle 数据类型?