You need to enable JavaScript to run this app. SQL CASE语句处理id_catelog1为空时产生重复id行的问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

SQL CASE语句处理id_catelog1为空时产生重复id行的问题咨询

解决方法

核心逻辑是先统计每个id下对应的不同id_catelog2的数量,再根据统计结果生成id_catelog_final,最后按id去重保证唯一性。

推荐写法(支持窗口函数的数据库通用)

SELECT DISTINCT
    id,
    name,
    id_catelog1,
    Large_id_catelog2,
    CASE
        -- id_catelog1非空时优先取该值
        WHEN id_catelog1 IS NOT NULL THEN id_catelog1
        -- id_catelog1为空且该id对应多个不同id_catelog2时返回multiple
        WHEN COUNT(DISTINCT id_catelog2) OVER (PARTITION BY id) > 1 THEN 'multiple'
        -- 其余情况取唯一的id_catelog2值
        ELSE id_catelog2
    END AS id_catelog_final
FROM
    `table`
WHERE
    id IS NOT NULL;

兼容写法(适配不支持窗口函数DISTINCT统计的数据库)

如果所用数据库不支持在窗口函数中使用DISTINCT,可改用CTE先预统计每个id的id_catelog2数量:

WITH id_catelog_stat AS (
    SELECT 
        id,
        COUNT(DISTINCT id_catelog2) AS catelog2_total
    FROM `table`
    WHERE id IS NOT NULL
    GROUP BY id
)
SELECT DISTINCT
    t.id,
    t.name,
    t.id_catelog1,
    t.Large_id_catelog2,
    CASE
        WHEN t.id_catelog1 IS NOT NULL THEN t.id_catelog1
        WHEN s.catelog2_total > 1 THEN 'multiple'
        ELSE t.id_catelog2
    END AS id_catelog_final
FROM `table` t
INNER JOIN id_catelog_stat s 
    ON t.id = s.id
WHERE t.id IS NOT NULL;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 17:54:02