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

如何合并数据表中同一ID下同时存在A和B值的行?

SQL合并特定ID的A/B值需求实现

原数据表

IDVALUE
1A
2A
2B
2C
3B

需求说明

当某个ID的VALUE列同时存在A和B值时,将这两行合并为一行(显示为“A & B”),其余行保持原样。

期望结果

IDVALUE
1A
2A & B
2C
3B

原SQL问题分析

你提供的SQL语句存在多处错误:

  • VALUE IN(A) 缺少单引号,正确写法应为 VALUE IN ('A');
  • 逻辑错误:单个VALUE不可能同时等于A和B,VALUE IN('A') AND VALUE IN('B') 永远为假;
  • GROUP BY的逻辑不符合需求,导致返回空表。

正确实现方案

通过分两部分查询再合并的方式实现:

  1. 先筛选出同时包含A和B的ID,为这些ID生成合并后的行;
  2. 查询所有不需要合并的行(排除已合并的A、B行,以及非目标ID的所有行);
  3. 用UNION ALL合并两部分结果并排序。
-- 生成合并后的A & B行
SELECT 
    ID,
    'A & B' AS VALUE
FROM 
    TABLE_NAME
WHERE 
    ID IN (
        SELECT ID 
        FROM TABLE_NAME 
        WHERE VALUE IN ('A', 'B') 
        GROUP BY ID 
        HAVING COUNT(DISTINCT VALUE) = 2
    )
GROUP BY ID

UNION ALL

-- 保留不需要合并的行
SELECT 
    ID,
    VALUE
FROM 
    TABLE_NAME
WHERE 
    NOT (
        ID IN (
            SELECT ID 
            FROM TABLE_NAME 
            WHERE VALUE IN ('A', 'B') 
            GROUP BY ID 
            HAVING COUNT(DISTINCT VALUE) = 2
        ) 
        AND VALUE IN ('A', 'B')
    )
ORDER BY ID, VALUE;

说明

  • 子查询SELECT ID FROM TABLE_NAME WHERE VALUE IN ('A', 'B') GROUP BY ID HAVING COUNT(DISTINCT VALUE) = 2用于精准筛选出同时拥有A和B的ID;
  • 第一部分查询为这些ID生成合并行;
  • 第二部分查询排除了目标ID下的A、B行,保留其他所有行;
  • ORDER BY ID, VALUE保证结果顺序与期望一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 08:40:21