我的测试表中有3列,如
ID | m_id | S_m_id
---------- --------------
1 | 1 | 1
1 | 2 | 3
1 | 3 | 4
1 | 5 | 6
2 | 1 | 1
2 | 2 | 3
2 | 3 | 4
3 | 5 | 6
我想基于第1列将第2列和第3列合并为一行。结果应该像
ID | merge_id
---------- --------------
1 | 1,1;2,3;3,4;5,6
2 | 1,1;2,3;3,4
3 | 5,6
答案 0 :(得分:4)
聚合时,您需要的函数是listagg()
,并且字符串连接。您还需要首先将ID连接在一起:
select id,
listagg(m_id || ',' || s_m_id, ';') within group (order by m_id) as merge_ids
from test t
group by id;
顺便说一句,结果数据不正确(因为所有三行的id都相同)。这可能是downvote的原因。
编辑(回应评论):
原始示例中有两个分隔符,一个是逗号(在ID之间),另一个是分号(在行之间)。您可以使用'|'
替换以获取管道分隔符。