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

SQL实现:同一ID含两类记录时用CASE WHEN生成第三类分组

实现方法

这个需求很典型,就是要对同一ID下的多类型记录做统一标记,我给你两种常用的SQL实现方案,分别适配查询和更新场景:

方案1:查询生成结果(不修改原表)

如果只是需要输出处理后的结果,不想改动原数据,用窗口函数是最简洁的方式:

SELECT 
    ID,
    CASE 
        -- 统计当前ID下有多少种不同的Type,等于2说明同时存在LD和A
        WHEN COUNT(DISTINCT Type) OVER (PARTITION BY ID) = 2 THEN 'LD_A'
        -- 否则保留原Type
        ELSE Type
    END AS Type
FROM your_table;

说明:PARTITION BY ID会把数据按ID分组,窗口函数COUNT(DISTINCT Type)计算每组内的不同类型数量,判断为2时就返回LD_A,刚好满足你要的保留行数且统一标记的需求。

方案2:直接更新原表

如果需要修改原表中的数据,不同数据库的语法略有差异,这里给出通用的关联更新写法:

MySQL 版本

UPDATE your_table t1
-- 子查询找出所有同时包含LD和A的ID
JOIN (
    SELECT ID 
    FROM your_table 
    GROUP BY ID 
    HAVING COUNT(DISTINCT Type) = 2
) t2 ON t1.ID = t2.ID
SET t1.Type = 'LD_A';

PostgreSQL 版本

UPDATE your_table
SET Type = 'LD_A'
WHERE ID IN (
    SELECT ID 
    FROM your_table 
    GROUP BY ID 
    HAVING COUNT(DISTINCT Type) = 2
);

说明:先通过子查询筛选出符合条件的ID集合,再把这些ID对应的所有记录的Type字段更新为LD_A,其他ID的记录不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:48:13