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