Oracle SQL如何关联第二张表并将其内容合并到第一张表的单个字段中?
Oracle SQL 多行详情合并为单个字段解决方案
针对你需要将DETAILS表的多行键值对合并到CUSTOMERS表单个字段、每个客户仅保留一行的需求,可以使用Oracle的LISTAGG函数实现字符串聚合。
最终查询语句
SELECT C.ID, C.NAME, LISTAGG(D.DETAIL || ': ' || D.VALUE, ' ') WITHIN GROUP (ORDER BY D.DETAIL) AS DETAILS FROM CUSTOMERS C LEFT JOIN DETAILS D ON C.ID = D.ID GROUP BY C.ID, C.NAME
关键部分说明
LISTAGG函数:将分组内的字符串按指定分隔符拼接成单个字符串。这里先把DETAIL和VALUE拼接为键: 值格式,再用两个空格作为分隔符连接所有键值对。WITHIN GROUP (ORDER BY D.DETAIL):可选配置,指定拼接时的排序规则,确保详情按固定顺序排列。不需要特定顺序可省略ORDER BY部分。LEFT JOIN:替换原查询的JOIN,确保无对应DETAILS记录的客户也能保留在结果中,此时DETAILS字段为NULL。若仅需保留有详情的客户,仍可使用INNER JOIN。GROUP BY:必须按CUSTOMERS.ID和CUSTOMERS.NAME分组,保证每个客户仅生成一行结果。
执行结果
该查询会输出你预期的格式:
| ID | NAME | DETAILS |
|---|---|---|
| 5 | John Smith | Street: Elm St. Post_code: 12345 Number: 17 |
| 17 | Jane Doe | Telephone: 09999999 Fax: 088888888888 |
内容的提问来源于stack exchange,提问作者smcs
相关产品推荐
相关产品推荐

