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

如何按ExportID/导出时间将多行合并为逗号分隔的单行记录

实现需求的SQL方案

根据你提供的表结构和需求,以下是不同数据库系统下,按ExportID/Action Time分组并合并Index Value为逗号分隔字符串的SQL写法:

MySQL(5.7及以上版本)

使用GROUP_CONCAT函数完成字符串聚合:

SELECT 
    e.ExportID,
    e.`Action Time`,
    GROUP_CONCAT(i.`Index Value` SEPARATOR ', ') AS Merged_Index_Values
FROM 
    `Export Table` e
JOIN 
    `Index Table` i ON e.`Index ID` = i.`Index ID`
GROUP BY 
    e.ExportID, e.`Action Time`;

如果需要对聚合的Index Value去重或指定排序,可修改聚合部分为:

GROUP_CONCAT(DISTINCT i.`Index Value` ORDER BY i.`Index Value` SEPARATOR ', ')

SQL Server(2017及以上版本)

使用STRING_AGG函数实现:

SELECT 
    e.ExportID,
    e.[Action Time],
    STRING_AGG(i.[Index Value], ', ') WITHIN GROUP (ORDER BY i.[Index Value]) AS Merged_Index_Values
FROM 
    [Export Table] e
JOIN 
    [Index Table] i ON e.[Index ID] = i.[Index ID]
GROUP BY 
    e.ExportID, e.[Action Time];

需去重则添加DISTINCT关键字:

STRING_AGG(DISTINCT i.[Index Value], ', ') WITHIN GROUP (ORDER BY i.[Index Value])

PostgreSQL

同样使用STRING_AGG函数:

SELECT 
    e."ExportID",
    e."Action Time",
    STRING_AGG(i."Index Value", ', ' ORDER BY i."Index Value") AS Merged_Index_Values
FROM 
    "Export Table" e
JOIN 
    "Index Table" i ON e."Index ID" = i."Index ID"
GROUP BY 
    e."ExportID", e."Action Time";

去重版本:

STRING_AGG(DISTINCT i."Index Value", ', ' ORDER BY i."Index Value")

注意事项

  • 你期望结果中包含的SMS对应Index ID333,但现有导出表中没有关联该Index ID的记录,需确认是否存在数据遗漏或关联规则调整的需求。
  • 若仅需按Action Time分组,只需将GROUP BY子句改为GROUP BY e."Action Time"(对应数据库的字段引用格式)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:48:17