SQL Server中如何按COMMENT_ID顺序聚合USER_COMMENTS
按COMMENT_ID顺序聚合USER_COMMENTS的正确方法
核心解决方案
问题出在你使用STRING_AGG时未指定排序规则,数据库默认按非确定性顺序聚合。只需在STRING_AGG内部添加ORDER BY COMMENT_ID即可保证拼接顺序。
针对SQL Server的写法:
SELECT ID, STRING_AGG(USER_COMMENTS, '') WITHIN GROUP (ORDER BY COMMENT_ID ASC) AS FULL_COMMENT FROM TABLE_A GROUP BY ID;
针对PostgreSQL 14+的写法:
SELECT ID, STRING_AGG(USER_COMMENTS, '' ORDER BY COMMENT_ID ASC) AS FULL_COMMENT FROM TABLE_A GROUP BY ID;
为什么之前的写法会乱序
未指定ORDER BY时,数据库会根据数据存储位置、查询优化策略等随机顺序拼接USER_COMMENTS,无法保证和COMMENT_ID的顺序一致。
示例验证
假设你的原表数据如下:
| COMMENT_ID | ID | USER_COMMENTS |
|---|---|---|
| 1 | 1 | 你好, |
| 2 | 1 | 我是新手 |
| 3 | 1 | 请教问题。 |
| 1 | 2 | 这个功能 |
| 2 | 2 | 怎么实现? |
执行正确SQL后会得到期望输出:
| ID | FULL_COMMENT |
|---|---|
| 1 | 你好,我是新手请教问题。 |
| 2 | 这个功能怎么实现? |
你的表DDL参考
CREATE TABLE TABLE_A ( COMMENT_ID INT, ID INT, USER_COMMENTS VARCHAR(255) );
内容的提问来源于stack exchange,提问作者Novice_Techie
相关产品推荐
相关产品推荐

