SQL拆分重复项并重命名
我有一个包含员工ID和用户名的表。某些员工ID重复,但用户名不同。我需要去掉重复的,并用新的员工ID将它们添加回列表中 例如:SQL拆分重复项并重命名,sql,duplicates,Sql,Duplicates,我有一个包含员工ID和用户名的表。某些员工ID重复,但用户名不同。我需要去掉重复的,并用新的员工ID将它们添加回列表中 例如: EMPID|UserName 1 | Josh 2 | John 2 | Kate 2 | Jorge 3 | Taylor 3 | Morgan 4 | Nathan 我需要切换到: 1|Josh 2|John 3|Taylor 4|Nathan 5|Kate 6|Jorge 7|Morgan 我知道查找重复项的SQL语句
EMPID|UserName
1 | Josh
2 | John
2 | Kate
2 | Jorge
3 | Taylor
3 | Morgan
4 | Nathan
我需要切换到:
1|Josh
2|John
3|Taylor
4|Nathan
5|Kate
6|Jorge
7|Morgan
我知道查找重复项的SQL语句。但要做这种动作,我就不知所措了
谢谢大家! 测试数据
更新查询
结果
从@Table中选择*
╔═══════╦══════════╗
║ EMPID ║ UserName ║
╠═══════╬══════════╣
║ 1 ║ Josh ║
║ 2 ║ Kate ║
║ 3 ║ Taylor ║
║ 4 ║ Nathan ║
║ 5 ║ John ║
║ 6 ║ Jorge ║
║ 7 ║ Morgan ║
╚═══════╩══════════╝
您使用的是什么数据库?为什么要查找重复的数据库?再次设置所有用户的
EmpId
。使用Mircosoft SQL 2008 R2。我必须保留具有相同EmpId的唯一用户。查找所有重复项,查找最大EmpId,设置重复项EmpId,序列号从最大EmpId开始
;WITH CTE AS
(
SELECT * , ROW_NUMBER() OVER (ORDER BY EMPID,UserName) + (SELECT MAX(EMPID) FROM @TABLE) New_ID
FROM @TABLE t
WHERE NOT EXISTS (SELECT EMPID , MAX(UserName) AS UserName1
FROM @TABLE
WHERE EMPID = t.EMPID
GROUP BY EMPID
HAVING MAX(UserName) = t.UserName)
)
UPDATE CTE
SET EMPID = New_ID
╔═══════╦══════════╗
║ EMPID ║ UserName ║
╠═══════╬══════════╣
║ 1 ║ Josh ║
║ 2 ║ Kate ║
║ 3 ║ Taylor ║
║ 4 ║ Nathan ║
║ 5 ║ John ║
║ 6 ║ Jorge ║
║ 7 ║ Morgan ║
╚═══════╩══════════╝