如何仅更新一个重复记录

时间:2014-04-16 17:53:14

标签: sql sql-server

我希望将所有重复记录的状态更新为非活动状态(Status ='I'),除了sql中的一个,对于表中的所有记录,默认状态为活动状态(Status ='A')。应该不使用任何内置的sql函数来完成:row_num(),rank(),set rowcount等。

CREATE TABLE dup_test
(
   Emp_ID INT,
   Mgr_ID INT,
   Status Varchar(5)
 )

INSERT INTO dup_test VALUES (1,1,'A');
INSERT INTO dup_test VALUES (1,1,'A');
INSERT INTO dup_test VALUES (1,1,'A');
INSERT INTO dup_test VALUES (2,2,'A');
INSERT INTO dup_test VALUES (2,2,'A');
INSERT INTO dup_test VALUES (3,3,'A');

预期结果:

Emp_ID,Mgr_ID,状态

1        1        A
1        1        I
1        1        I
2        2        A
2        2        I
3        3        A

提前致谢。

1 个答案:

答案 0 :(得分:0)

更改表并添加标识列(ID):

ALTER TABLE dup_test ADD id INT NOT NULL IDENTITY (1, 1)

然后如下所示:

UPDATE dup_test SET Status='I' FROM dup_test dt LEFT OUTER JOIN (SELECT Emp_ID, MAX(ID) AS maxid FROM dup_test GROUP BY Emp_ID) AS dt2 ON dt.Emp_ID=dt2.Emp_ID AND dt.ID=dt2.maxid WHERE dt2.maxID IS NULL