Sql 更新表中的重复字段
我有大约100000条记录的表。我需要像这样更新相同的字段。 例如,这是我的桌子Sql 更新表中的重复字段,sql,sql-server,tsql,sql-server-2008-r2,sql-update,Sql,Sql Server,Tsql,Sql Server 2008 R2,Sql Update,我有大约100000条记录的表。我需要像这样更新相同的字段。 例如,这是我的桌子 id name 1 sss 2 bbb 3 ccc 4 avg 5 bbb 6 bbb 7 sss 8 mmm 9 avg 执行脚本后,我需要获取 id name 1 sss 2 bbb 3 ccc 4 avg 5 bbb-5 6 bbb-6 7
id name
1 sss
2 bbb
3 ccc
4 avg
5 bbb
6 bbb
7 sss
8 mmm
9 avg
执行脚本后,我需要获取
id name
1 sss
2 bbb
3 ccc
4 avg
5 bbb-5
6 bbb-6
7 sss-7
8 mmm
9 avg-9
我如何才能做到这一点?使用
CTE
WITH greaterRecord
AS
(
SELECT id,
name,
ROW_NUMBER() OVER(PARTITION BY name ORDER BY id) RN
FROM TableName
)
UPDATE greaterRecord
SET name = name + '-' + CAST(id AS VARCHAR(10))
WHERE RN > 1
UPDATE a
SET a.Name = a.Name + '-' + CAST(ID AS VARCHAR(10))
FROM tableName a
LEFT JOIN
(
SELECT MIN(ID) min_ID, name
FROM tableName
GROUP BY name
) b ON a.name = b.name AND
a.ID = b.Min_ID
WHERE b.Name IS NULL
╔════╦═══════╗
║ ID ║ NAME ║
╠════╬═══════╣
║ 1 ║ sss ║
║ 2 ║ bbb ║
║ 3 ║ ccc ║
║ 4 ║ avg ║
║ 5 ║ bbb-5 ║
║ 6 ║ bbb-6 ║
║ 7 ║ sss-7 ║
║ 8 ║ mmm ║
║ 9 ║ avg-9 ║
╚════╩═══════╝
这应该做到:
;WITH CTE AS
(
SELECT id,
name,
RN = ROW_NUMBER() OVER(PARTITION BY name ORDER BY id)
FROM YourTable
)
UPDATE CTE
SET name = name + '-' + CAST(id AS VARCHAR(8))
WHERE RN > 1