我正在从一个表中选择列,并希望在两个表具有匹配值时从相关表中选择列的所有值,用逗号分隔它们,并将它们显示在一个列中,其结果来自表一。
我对此很新,如果我没有正确写字,请提前道歉。
答案 0 :(得分:1)
听起来你要做的就是通过连接一列或多列中的字符串值来获取多行并将它们聚合成一行。是吗?
如果是这种情况,我可以告诉你,如果你想使用便携式SQL做这个问题,这是一个更难的问题 - 特别是如果你不提前知道你可能得到多少项目。
在这种情况下经常使用的特定于Oracle的解决方案是实现自定义聚合函数 - STRAGG()
。这是一个link to an article,它准确地描述了如何操作,并举例说明了它的用法。
如果您使用的是Oracle 9i或更高版本,并且愿意使用未记录的函数(将来可能会更改),您还可以查看WM_CONCAT()
函数 - 它的功能大致相同。
答案 1 :(得分:1)
您需要行聚合或连接功能,选项包括:
如果您使用的是Oracle 11gR2,则有一个内置函数可以使用名为LISTAGG(column, delimiter)
的分隔符聚合字符串。
如果您使用的是Oracle数据库的任何早期版本,则可以使用WM_CONCAT(column)
函数,但是您无法选择分隔符,并且必须使用类似TRANSLATE(string, string_to_replace, replacement_string)
函数的内容来更改如果您的数据不包含逗号,则定界符。
正如LBushkin所提到的,您可以在架构中创建自定义函数以执行行聚合。以下是一个PL / SQL代码示例:http://www.oracle-base.com/articles/misc/StringAggregationTechniques.php#user_defined_aggregate_function