如何在TSQL中按条件过滤重复行 员工表去重保留Active记录
TSQL员工重复记录筛选实现方案
核心实现逻辑
使用ROW_NUMBER()窗口函数按员工维度分组,给同员工的记录设置状态优先级排序,取每组排名第一的记录即可满足需求:同员工有多条记录时优先取Active状态的,单条记录无论状态直接保留。
实现代码
-- 定义CTE给每条员工记录打排名标签 WITH RankedEmp AS ( SELECT FullName, Status, [Current Position], -- 列名带空格需用方括号包裹 ROW_NUMBER() OVER( PARTITION BY FullName -- 按员工姓名分组,若表有唯一员工ID建议替换为ID,避免同名冲突 ORDER BY CASE WHEN Status = 'Active' THEN 1 ELSE 2 END -- Active状态优先级更高,排在组内第一位 ) AS rn FROM 你的员工表 -- 替换为实际的表名 ) -- 筛选每组排名第一的记录即为最终结果 SELECT FullName, Status, [Current Position] FROM RankedEmp WHERE rn = 1
结果验证
用提供的示例数据执行上述代码,返回结果和预期完全一致,符合contract to hire、rebadge场景下的去重需求。
内容的提问来源于stack exchange,提问作者muddu83
相关产品推荐
相关产品推荐

