如何将SQL查询中同一PO的多行注释拼接为单行字段
解决方案
你需要使用对应数据库的分组字符串聚合函数实现同PO多行注释的拼接,普通CONCAT函数仅支持同一行多字段拼接,无法满足同分组内多行内容的拼接需求,也不需要额外写JOIN逻辑。不同主流数据库的实现代码如下:
- MySQL 8.0+/MariaDB 版本实现:
SELECT PO, GROUP_CONCAT(COMMENT_LINE ORDER BY SEQUENCE_NUMBER SEPARATOR ', ') AS `COMMENT LINE` FROM `Database` GROUP BY PO;
- PostgreSQL 版本实现:
SELECT PO, STRING_AGG(COMMENT_LINE, ', ' ORDER BY SEQUENCE_NUMBER) AS "COMMENT LINE" FROM "Database" GROUP BY PO;
- SQL Server 2017及以上版本实现:
SELECT PO, STRING_AGG(COMMENT_LINE, ', ') WITHIN GROUP (ORDER BY SEQUENCE_NUMBER) AS [COMMENT LINE] FROM [Database] GROUP BY PO;
- Oracle 11g及以上版本实现:
SELECT PO, LISTAGG(COMMENT_LINE, ', ') WITHIN GROUP (ORDER BY SEQUENCE_NUMBER) AS "COMMENT LINE" FROM "Database" GROUP BY PO;
注意:所有示例都默认按
SEQUENCE_NUMBER正序拼接注释,保证和原行顺序一致。如果遇到拼接结果被截断的问题,可根据对应数据库的规则调整聚合函数的长度限制参数。
内容的提问来源于stack exchange,提问作者Jordan
相关产品推荐
相关产品推荐

