在Oracle中将多行合并为一行? [复制]
Posted
技术标签:
【中文标题】在Oracle中将多行合并为一行? [复制]【英文标题】:combine multiple rows into a single row in Oracle? [duplicate] 【发布时间】:2013-06-17 12:45:22 【问题描述】:我的测试表中有 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
【问题讨论】:
这被称为字符串聚合——搜索 SO 寻找很多例子 【参考方案1】:您需要的函数是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 都相同)。这可能是反对票的原因。
编辑(回应评论):
在原始示例中有两个分隔符,一个是逗号(在 id 之间),一个是分号(在行之间)。您可以用'|'
替换任何一个来获得管道分隔符。
【讨论】:
嗨,戈登,谢谢...它有效...但是我如何将 id 列与分隔符 | 合并。 现在想将第 1 列和第 2 列与管道分隔符合并 select id,test.nextval listagg(m_id || ',' || s_m_id, ';') 组内(按 m_id 排序)作为来自 test t 组的merge_ids by id;使用此查询,我得到了 ora - 02287 序列号,此处不允许。以上是关于在Oracle中将多行合并为一行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Oracle 中将多行组合成逗号分隔的列表? [复制]
在SQL Server中将多行相同id的行合并为一行[关闭]