我正在尝试使用LISTAGG()
函数在单个单元格中创建一个数组。
下面我有我用来尝试实现以下输出的查询。
SELECT
x, y,
LISTAGG(VALUE, '; ') WITHIN GROUP (ORDER BY VALUE) AS z
FROM
MV_SHARED_TABLE
WHERE
y = 'multi_MVL'
GROUP BY
x, y
期望输出:
x, y, z (1; 2; 3; 4)
x1, y1, z (1; 2; 3; 4)
我的问题是,当我运行查询时,它似乎有正确的信息,除了我选择的分隔符(;)。
而不是那样,我只是得到一个简单的(,)逗号作为分隔符。
这一切都通过DBVisualizer发生并连接到Oracle DB。
谢谢!
答案 0 :(得分:0)
在12c上为我工作正常:
SQL> select banner from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
CORE 12.1.0.2.0 Production
TNS for Linux: Version 12.1.0.2.0 - Production
NLSRTL Version 12.1.0.2.0 - Production
SQL> create table my_shared_table(x varchar2(10), y varchar2(10), value number);
Table created.
SQL>
SQL> insert into my_shared_table
2 select 'x', 'y', 1 from dual union
3 select 'x', 'y', 2 from dual union
4 select 'x', 'y', 3 from dual union
5 select 'x', 'y', 4 from dual union
6 --
7 select 'x1', 'y1', 5 from dual union
8 select 'x1', 'y1', 6 from dual union
9 select 'x1', 'y1', 7 from dual union
10 select 'x1', 'y1', 8 from dual;
8 rows created.
SQL>
SQL> select x, y, listagg(value, '; ') within group (order by value) as z
2 from my_shared_table
3 group by x, y;
X Y Z
---------- ---------- --------------------
x y 1; 2; 3; 4
x1 y1 5; 6; 7; 8
SQL>