【问题标题】:SQL split duplicates and renameSQL拆分重复并重命名
【发布时间】:2015-01-20 21:57:39
【问题描述】:

我有一张包含员工 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
  • 使用微软 SQL 2008 R2。
  • 我必须使用相同的 EmpId 保留唯一的。
  • 查找所有重复项,找到最大 EmpId,设置重复项 EmpId,其序号从最大 empId 开始

标签: sql duplicates


【解决方案1】:

测试数据

DECLARE @TABLE TABLE (EMPID INT, UserName VARCHAR(10))
INSERT INTO @TABLE VALUES
(1 ,'Josh') ,(2 ,'John')  ,(2 ,'Kate'),
(2 ,'Jorge'),(3 ,'Taylor'),(3 ,'Morgan'),4 ,'Nathan')

更新查询

;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   ║
╚═══════╩══════════╝

【讨论】:

    猜你喜欢
    • 2017-08-15
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2014-06-22
    • 2019-01-22
    相关资源
    最近更新 更多