You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按SEQUENCE与CREATEDATE合并多行数据至单列的SQL问题

SQL分组拼接TEXT字段解决方案

现有表结构

PK_IDFK_IDSEQUENCETEXTCREATEDATEUPDATEDATE
123345658955521This is12-JAN-2213-JAN-22
123345758955522a SQLL12-JAN-2213-JAN-22
123345858955521This is13-JAN-2214-JAN-22
123345958955522a SQL13-JAN-2214-JAN-22
123346058955521This is14-JAN-2215-JAN-22
123346158955522a SQL.com14-JAN-2215-JAN-22
123346258955521This is15-JAN-22
123346358955522a SQLcom15-JAN-22

需求说明

按SEQUENCE和CREATEDATE对TEXT字段分组合并(UPDATEDATE为NULL代表当前记录),最终结果按CREATEDATE排序。曾尝试使用FOR XML PATH和STUFF实现,但因日期分组逻辑问题无法得到预期输出。

预期输出

FK_IDTEXTCREATEDATE
5895552This is a SQLL12-JAN-22
5895552This is a SQL13-JAN-22
5895552This is a SQL.com14-JAN-22
5895552This is a SQLcom15-JAN-22

可行SQL方案

方案1:SQL Server 2017+版本(简洁高效)

使用STRING_AGG函数直接完成分组拼接:

SELECT 
    FK_ID,
    STRING_AGG(TEXT, ' ') WITHIN GROUP (ORDER BY SEQUENCE) AS TEXT,
    CREATEDATE
FROM 
    YourTableName -- 替换为你的实际表名
GROUP BY 
    FK_ID, CREATEDATE
ORDER BY 
    CREATEDATE;

方案2:低版本SQL Server(兼容旧环境)

使用STUFF+FOR XML PATH组合实现拼接:

SELECT 
    DISTINCT FK_ID,
    STUFF((
        SELECT ' ' + TEXT 
        FROM YourTableName t2
        WHERE t2.FK_ID = t1.FK_ID 
          AND t2.CREATEDATE = t1.CREATEDATE
        ORDER BY t2.SEQUENCE
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS TEXT,
    CREATEDATE
FROM 
    YourTableName t1 -- 替换为你的实际表名
ORDER BY 
    CREATEDATE;

方案说明

两种方案均以FK_ID和CREATEDATE作为核心分组条件,在每个分组内严格按SEQUENCE顺序拼接TEXT字段,最终按CREATEDATE排序输出,完全匹配预期结果。之前的问题大概率是未正确以CREATEDATE作为分组维度,或者拼接时未指定SEQUENCE的排序规则。

内容的提问来源于stack exchange,提问作者ajaloha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 03:53:22