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

如何在Department表中对重复DeptID的Name列填充NULL值?

处理重复部门ID的Name列填充问题

需求:当Department表中存在重复的部门ID(Dept)时,将该部门对应的Name列值填充为NULL。

原始表数据

Dept    Name  
200    ABC  
200    XYZ  
100    DEF  

期望输出

Dept   Name  
200    NULL  
100    DEF  

解决方案

方法1:使用窗口函数(适用于MySQL 8.0+、PostgreSQL、SQL Server等支持窗口函数的数据库)

SELECT DISTINCT
    Dept,
    CASE 
        WHEN COUNT(*) OVER (PARTITION BY Dept) > 1 THEN NULL 
        ELSE Name 
    END AS Name
FROM Department;

逻辑说明:通过PARTITION BY Dept按部门分组统计记录数,若某部门记录数大于1(存在重复),则将Name设为NULL;DISTINCT确保每个部门只返回一行结果。

方法2:使用子查询(兼容低版本MySQL等不支持窗口函数的数据库)

SELECT
    d.Dept,
    CASE 
        WHEN t.cnt > 1 THEN NULL 
        ELSE d.Name 
    END AS Name
FROM Department d
INNER JOIN (
    SELECT Dept, COUNT(*) AS cnt
    FROM Department
    GROUP BY Dept
) t ON d.Dept = t.Dept
GROUP BY d.Dept, t.cnt, d.Name
HAVING t.cnt = 1 OR (t.cnt > 1 AND d.Name IS NOT NULL)
ORDER BY d.Dept;

逻辑说明:先通过子查询统计每个部门的记录数,再关联原表判断;分组和HAVING子句确保重复部门只返回一行Name为NULL的结果,非重复部门保留原Name。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:22:10