Sql server 2012 如何在SQL Server中更新重复行的列

Sql server 2012 如何在SQL Server中更新重复行的列,sql-server-2012,Sql Server 2012,我有一个表tUser,其中列有用户名,密码,电子邮件,活动 我需要将重复行的Active列设置为0。我怎样才能做到这一点 表中的值是 UserName Password Email Active ----------------------------------------------- Demo demo abc@gmail.com 1 Demo demo abc@gmail.com

我有一个表
tUser
,其中列有
用户名
密码
电子邮件
活动

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

表中的值是

UserName    Password   Email             Active
-----------------------------------------------
Demo        demo       abc@gmail.com       1
Demo        demo       abc@gmail.com       1
Demo        demo       abc@gmail.com       1
我需要将此值更改为

Demo demo abc@gmail.com 1
另外两行应该是

Demo demo abc@gmail.com 0
Demo demo abc@gmail.com 0

一旦您的表中有一个唯一标识每一行的主键,您就可以使用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

一旦您的表中有一个唯一标识每一行的主键,您就可以使用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

什么定义了复制?相同的用户名?还是相同的用户名+相同的电子邮件?还有:什么可以唯一标识每一行(例如,表的主键是什么)?@marc\s。。。是,用户名,email.Active列重复。我们在表中有一个主键用户ID。什么定义了重复?相同的用户名?还是相同的用户名+相同的电子邮件?还有:什么可以唯一标识每一行(例如,表的主键是什么)?@marc\s。。。是,用户名,email.Active列重复。我们在表中有一个主键UserID,这个条件是不是真的需要d.UserID=tUser.UserID。否则,tUser中的所有数据都将具有
Active=0
这种情况
其中d.UserID=tUser.UserID
在这里真的需要吗?@John Yes。否则,tUser中的所有数据将具有
Active=0