Duplizierte Felder in der Tabelle aktualisieren

Ich habe Tisch mit ca. 100000 datasätzen. Ich brauche die gleichen Felder wie diese. Zum Beispiel ist das mein Tisch

id name 1 sss 2 bbb 3 ccc 4 avg 5 bbb 6 bbb 7 sss 8 mmm 9 avg 

Nach dem Ausführen von Skript muss ich bekommen

 id name 1 sss 2 bbb 3 ccc 4 avg 5 bbb-5 6 bbb-6 7 sss-7 8 mmm 9 avg-9 

Wie kann ich das machen?

Solutions Collecting From Web of "Duplizierte Felder in der Tabelle aktualisieren"

Durch die Verwendung von 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 
  • SQLFiddle Demo

Dies ist die gemeinsame Abfrage, die auf den meisten RDBMS funktioniert

 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 
  • SQLFiddle Demo

OUTPUT nach Ausführung der Update-statement

 ╔════╦═══════╗ ║ ID ║ NAME ║ ╠════╬═══════╣ ║ 1 ║ sss ║ ║ 2 ║ bbb ║ ║ 3 ║ ccc ║ ║ 4 ║ avg ║ ║ 5 ║ bbb-5 ║ ║ 6 ║ bbb-6 ║ ║ 7 ║ sss-7 ║ ║ 8 ║ mmm ║ ║ 9 ║ avg-9 ║ ╚════╩═══════╝ 

Dies sollte tun:

 ;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