如何在Oracle SQL Developer中按ID合并多行列值?
Oracle按ID拼接多行Level列值的解决方案
要实现按ID分组拼接Level列的值,Oracle提供了LISTAGG函数,这是11g及以后版本支持的字符串聚合函数,适配Oracle SQL Developer的使用场景。
核心SQL语句
由于Level是Oracle的保留关键字,作为列名时需要用双引号包裹避免语法错误,以下是实现代码:
SELECT ID, LISTAGG("Level", ' - ') WITHIN GROUP (ORDER BY "Level") AS "Level" FROM -- 替换为你的实际表名 your_table GROUP BY ID;
保持原数据顺序的调整
如果需要严格按照原表中各行的出现顺序拼接(比如示例中ID=000的C在前、FK在后,ID=222的FN在前、C在后),可以通过ROWID排序(若有专门的排序字段如时间戳,建议替换为该字段更可靠):
SELECT ID, LISTAGG("Level", ' - ') WITHIN GROUP (ORDER BY ROWID) AS "Level" FROM your_table GROUP BY ID;
结果说明
执行上述语句后,会将同一ID下的所有Level值用-连接,输出格式完全符合预期:
- ID=000对应
C - FK - ID=111对应
F - ID=222对应
FN - C - ID=333对应
F - C - ID=444对应
C
内容的提问来源于stack exchange,提问作者Req_7
相关产品推荐
相关产品推荐

