WBA*_*BAR 5 sql plsql oracle11g
我有一些TABLE1数据表:
+------------+
| COL1 |
+------------+
| FOO |
| BAR |
| (null) |
| EXP |
+------------+
Run Code Online (Sandbox Code Playgroud)
( FIDDLE)
当我执行时:
SELECT listagg(col1, '#') within group(ORDER BY rownum)
FROM table1
Run Code Online (Sandbox Code Playgroud)
我收到:FOO#BAR#EXP但我想拥有:FOO#BAR##EXP
(LISTAGG忽略空单元格:/)
有没有实现自己的功能的想法吗?
select replace(listagg(NVL(col1, '#'), '#')
within group(order by rownum),'###','##') from table1
Run Code Online (Sandbox Code Playgroud)
您可以在NVL(col1, '#') 此处使用,您可以传递任何值而不是null。
小智 5
select substr(listagg('#'||col1) within group (order by rownum),2)
from table1
Run Code Online (Sandbox Code Playgroud)
在每个值之前添加分隔符(这只会为 NULL 生成分隔符),然后在没有分隔符的情况下进行聚合,并去除前导分隔符。