如何更新 SQL Server 中重复行的列

Sar*_*rat 1 sql-server-2012

我有一个tUser列有username, password, email,的表Active

我需要将Active重复行的列设置为 0。我怎样才能做到这一点?

例如:表值是

UserName    Password   Email             Active
-----------------------------------------------
Demo        demo       abc@gmail.com       1
Demo        demo       abc@gmail.com       1
Demo        demo       abc@gmail.com       1
Run Code Online (Sandbox Code Playgroud)

我需要将此值更改为

Demo demo abc@gmail.com 1
Run Code Online (Sandbox Code Playgroud)

其他 2 行应该是

Demo demo abc@gmail.com 0
Demo demo abc@gmail.com 0
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 5

一旦您的表中有一个唯一标识每一行主键,那么您就可以使用 CTE 和这种方法来清除任何重复项:

;WITH Duplicates AS
(
    SELECT
        UserID, Username, Password, Email, Active,
        RowNum = ROW_NUMBER() OVER (PARTITION BY Username, Email ORDER BY UserID)
    FROM
        tUser
)
UPDATE tUser
SET Active = 0
FROM Duplicates d
WHERE d.UserID = tUser.UserID
  AND d.RowNum > 1
Run Code Online (Sandbox Code Playgroud)