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

求助:如何基于OT_ID合并多行数据?STING_AGG语法报错

解决按ID合并字段值的语法错误问题

问题分析

你原查询的核心问题有两个:

  1. 错误地进行了多表关联,根据你给出的示例数据,所有需要的字段都在同一张表内,无需关联test/test1/optn/addtopn这些表;
  2. 尝试的聚合函数拼写错误(STING_AGG应为STRING_AGG),且未配合GROUP BY子句使用,这是导致语法错误的直接原因。

正确解决方案

根据你需要按OT_ID合并OPTION和OPTION2字段的需求,以下是不同数据库环境下的可行SQL:

SQL Server

SELECT 
    OT_ID,
    CODE,
    STRING_AGG([OPTION], ',') WITHIN GROUP (ORDER BY (SELECT NULL)) AS [OPTION],
    STRING_AGG(OPTION2, ',') WITHIN GROUP (ORDER BY (SELECT NULL)) AS OPTION2
FROM your_table_name  -- 替换为你的实际表名
GROUP BY OT_ID, CODE;

注:[OPTION]中的方括号是因为OPTION是SQL关键字,必须转义;ORDER BY (SELECT NULL)表示保留原表数据的顺序,如需指定排序逻辑可替换为具体字段。

MySQL

SELECT 
    OT_ID,
    CODE,
    GROUP_CONCAT(`OPTION` SEPARATOR ',') AS `OPTION`,
    GROUP_CONCAT(OPTION2 SEPARATOR ',') AS OPTION2
FROM your_table_name
GROUP BY OT_ID, CODE;

PostgreSQL

SELECT 
    OT_ID,
    CODE,
    STRING_AGG("OPTION", ',' ORDER BY (SELECT NULL)) AS "OPTION",
    STRING_AGG(OPTION2, ',' ORDER BY (SELECT NULL)) AS OPTION2
FROM your_table_name
GROUP BY OT_ID, CODE;

或使用array_agg配合array_to_string:

SELECT 
    OT_ID,
    CODE,
    array_to_string(array_agg("OPTION"), ',') AS "OPTION",
    array_to_string(array_agg(OPTION2), ',') AS OPTION2
FROM your_table_name
GROUP BY OT_ID, CODE;

Oracle

SELECT 
    OT_ID,
    CODE,
    LISTAGG("OPTION", ',') WITHIN GROUP (ORDER BY NULL) AS "OPTION",
    LISTAGG(OPTION2, ',') WITHIN GROUP (ORDER BY NULL) AS OPTION2
FROM your_table_name
GROUP BY OT_ID, CODE;

关键说明

  • 必须按OT_ID和CODE分组:因为同一OT_ID对应的CODE值一致,分组后才能将同组的字段值进行聚合合并;
  • 关键字转义:OPTION是SQL保留关键字,不同数据库的转义方式不同,必须转义才能避免语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:30:50