创建视图时如何将关联表的多行数据合并到同一列?
解决关联表聚合拼接为单行的问题
你的问题核心是未对关联后的结果按MyTable1.ID分组,直接使用LISTAGG无法自动合并行,导致仍返回多行。以下是正确的实现方案:
正确SQL代码
SELECT MyTable1.ID, LISTAGG(MyTable2.ID, ';') WITHIN GROUP (ORDER BY MyTable2.ID) AS MyTable2_IDs, LISTAGG(MyTable2.object_ID, ';') WITHIN GROUP (ORDER BY MyTable2.ID) AS MyTable2_ObjectIDs FROM MyTable1 LEFT JOIN MyTable2 ON MyTable2.MyTable1_ID = MyTable1.ID GROUP BY MyTable1.ID;
代码说明
GROUP BY MyTable1.ID:这是核心操作,将所有关联到同一个MyTable1.ID的MyTable2记录归为一组,确保最终每个MyTable1.ID仅返回一行结果。LISTAGG函数:对每个分组内的MyTable2.ID和MyTable2.object_ID分别执行拼接操作,用分号;分隔字段值,通过ORDER BY保证拼接顺序与原数据一致。- 别名设置:为拼接后的字段定义清晰别名,便于后续视图调用或数据处理。
原有代码无效原因
你之前的代码未添加GROUP BY分组逻辑,且LISTAGG被嵌套在CASE语句中但未触发聚合行为,数据库仍按单行逐条处理,因此返回3行结果。只有配合分组操作,聚合函数才能实现多行合并为单行的效果。
内容的提问来源于stack exchange,提问作者BiSaM
相关产品推荐
相关产品推荐

