我希望从一个在Oracle中返回多行的查询返回带有逗号分隔的值列表的单行,实质上是将返回的行展平为单行。
在PostgreSQL中,这可以使用数组和array_to_string函数来实现,如下所示:
给定表"people":
id | name
---------
1 | bob
2 | alice
3 | jonSQL:
select array_to_string(array(select name from people), ',') as names;将返回:
names
-------------
bob,alice,jon如何在Oracle 9i中实现相同的结果?
谢谢,
哑光
发布于 2010-12-02 01:07:24
蒂姆·霍尔拥有string aggregation techniques in Oracle的权威收藏。
如果您坚持使用9i,我个人的偏好是定义一个自定义聚合(在该页面上有一个string_agg的实现),这样您将拥有
SELECT string_agg( name )
FROM people但是您必须定义一个新的STRING_AGG函数。如果您需要避免创建新对象,还有其他方法,但在9i中,它们将比PostgreSQL语法更混乱。
发布于 2010-12-02 03:55:42
在10g中,我肯定更喜欢Tim文章末尾提到的COLLECT选项。
这种方法的好处是,相同的底层函数(接受集合作为参数)既可以用作聚合函数,也可以用作多集函数:
SELECT deptno, tab_to_string(CAST(MULTISET(SELECT ename FROM emp
WHERE deptno = dept.deptno) AS t_varchar2_tab), ',') FROM dept然而,在9i中这是不可用的。SYS_CONNECT_BY_PATH很好,因为它很灵活,但它可能很慢,所以要小心这一点。
https://stackoverflow.com/questions/4326868
复制相似问题