我希望将所有重复记录的状态更新为非活动状态(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
提前致谢。
答案 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