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

Informix SQL实现多行同列文本值拼接的技术问询

在Informix中合并同一记录的多行文本值

针对你需要按record_id分组,合并对应多行text列值的需求,Informix原生提供的LIST()函数是最优方案,它支持按指定顺序聚合字符串,完美适配你的场景。

核心解决方案:使用LIST()函数

LIST()函数可以将分组内的指定列值按排序规则拼接成单个字符串,语法如下:

LIST(column_name [, delimiter] ORDER BY sort_column)
  • column_name:需要聚合的目标列(此处为text)
  • delimiter:可选参数,指定拼接时的分隔符,默认用逗号
  • ORDER BY sort_column:指定聚合时的排序依据(此处用sequence_nbr保证文本按顺序拼接)

适配示例数据的SQL语句

SELECT 
    record_id,
    LIST(text, ' ') ORDER BY sequence_nbr AS combined_text
FROM 
    your_table_name
GROUP BY 
    record_id;

注:将your_table_name替换为你的实际表名,分隔符可根据需求调整,比如空格' '、换行'\n'或逗号','。

执行结果示例

record_idcombined_text
1000text string text string text string
1001text string
1002text string text string

为什么lead/lag/coalesce不适用?

你之前尝试的lead()/lag()是窗口函数,仅能获取当前行的上一行或下一行数据,无法直接聚合多行到同一行;coalesce()仅用于替换NULL值,不具备多行聚合能力,因此这些方法无法满足需求。

兼容旧版Informix的备选方案

如果你的Informix版本低于11.50,不支持LIST()函数,可以用自连接结合字符串拼接的方式实现:

SELECT 
    t1.record_id,
    MAX(
        t1.text || 
        COALESCE(' ' || t2.text, '') || 
        COALESCE(' ' || t3.text, '')
    ) AS combined_text
FROM 
    your_table_name t1
LEFT JOIN your_table_name t2 
    ON t1.record_id = t2.record_id AND t2.sequence_nbr = 2
LEFT JOIN your_table_name t3 
    ON t1.record_id = t3.record_id AND t3.sequence_nbr = 3
WHERE 
    t1.sequence_nbr = 1
GROUP BY 
    t1.record_id;

注意:这种方法需要提前预估分组内的最大行数,扩展性较差,优先推荐使用LIST()函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:27:22