我有一个表有一个重复值的列.我想更新2个重复值中的一个,例如row1 = tom和row2 = tom..我想在其中一个中添加1或a,这将是同一列中的许多其他重复项.基本上只需要为每1个重复项添加一个数字或字母,这样就不会有重复数据.
我得到了这个查询,它将更新所有重复项,但不会更新其中一个.有人可以帮忙吗?
UPDATE Table1
SET Column1 = 'a'
WHERE exists
(SELECT Column1 , COUNT(Column1 )
FROM Clients
GROUP BY Column1
HAVING ( COUNT(Column1 ) > 1)
)
Run Code Online (Sandbox Code Playgroud)
Nit*_*esh 41
试着用CTE和 PARTITION BY
;WITH cte AS
(
SELECT
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column1 ) AS rno,
Column1
FROM Clients
)
UPDATE cte SET Column1 =Column1 +' 1 '
WHERE rno=2
Run Code Online (Sandbox Code Playgroud)
我认为这个简单的更新是您正在寻找的;
UPDATE Table1 SET Column1=Column1+CAST(id AS VARCHAR)
WHERE id NOT IN (
SELECT MIN(id)
FROM Table1
GROUP BY Column1
);
Run Code Online (Sandbox Code Playgroud)
输入:
(1,'A'),
(2,'B'),
(3,'A'),
(4,'C'),
(5,'C'),
(6,'A');
Run Code Online (Sandbox Code Playgroud)
输出:
(1,'A'),
(2,'B'),
(3,'A3'),
(4,'C'),
(5,'C5'),
(6,'A6');
Run Code Online (Sandbox Code Playgroud)
我认为您可以使用TOP()运算符而不是row_number()方法,这将帮助您以简便的方式更新一个
UPDATE TOP ( 1 )Table1 SET Column1 = 'a';
Run Code Online (Sandbox Code Playgroud)
如果我们有这样的条件:
SELECT Column1 FROM Clients ORDER BY Column1
Column1
**********
Jhon
Jhon
Mike
Mike
Mike
Robert
Run Code Online (Sandbox Code Playgroud)
即使Column1重复 n 次,这也会起作用,它将行号附加到除第一行之外的每个重复行,尝试以下操作:
BEGIN
;WITH CTE AS
(
SELECT
ROW_NUMBER() OVER (PARTITION BY Column1 ORDER BY Column1) AS ROWNUMBER,
Column1
FROM Clients
)
UPDATE CTE
SET Column1 = CONCAT(Column1, ' ', (ROWNUMBER - 1))
WHERE ROWNUMBER > 1
SELECT Column1 FROM Clients ORDER BY Column1
END
Run Code Online (Sandbox Code Playgroud)
结果:
Column1
***********
Jhon
Jhon 1
Mike
Mike 1
Mike 2
Robert
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56393 次 |
| 最近记录: |