通常,WM_CONCAT是一个聚合函数,它从表中返回用逗号分隔的值,如下所示。
假设我有一个foo像这样的表:
foo
col_id | col_text 111 | This 111 | is 111 | a 111 | test.
如果我使用此查询:
SELECT CAST(WM_CONCAT(col_text) AS VARCHAR2(100)), col_id FROM foo
结果将是
This, is, a, test.
是否有可能改变分离器(',')到其他字符,如'.'或'|'的的WM_CONCAT()功能?
','
'.'
'|'
WM_CONCAT()
还是创建一个可以像这样执行的用户定义函数WM_CONCAT()?
您可能要使用 LISTAGG。
LISTAGG
SELECT col_id, LISTAGG(col_text, '|') WITHIN GROUP (ORDER BY col_text) text FROM table1 GROUP BY col_id
输出:
| COL_ID | TEXT | ---------------------------- | 111 | This|a|is|test. |
SQLFiddle
更新 如果您需要在列表中获取不同的文本值
SELECT col_id, LISTAGG(col_text, '|') WITHIN GROUP (ORDER BY col_text) text FROM ( SELECT DISTINCT col_id, col_text FROM table1 ) GROUP BY col_id