2011-10-10 2 views
2

Je suis à la recherche d'une aide à la requête suivante:mise à jour des valeurs incrémentielles dans une colonne SQL

J'ai un tas de lignes avec colonne TYPE, VERSION - mais dans certains cas, la version a obtenu foiré donc je veux pour le réécrire.

En fait, il semble maintenant ceci:

Type, Version 
A, 0 
A, 0 
A, 1 
A, 2 
B, 1 
B, 3 

Je veux qu'il ressemble à ceci:

Type, Version 
A, 0 
A, 1 
A, 2 
A, 3 
B, 0 
B, 1 

Toute aide serait grandement appréciée, Merci

+0

Comment vous savez quel enregistrement "A, 0" devrait devenir "A, 1"? Si vous avez un moyen fiable de les commander, la solution sera beaucoup plus facile. –

+0

L'un ou l'autre fera, car je ne peux pas savoir avec certitude lequel A est vraiment la version antérieure. – Gal

Répondre

5
WITH T AS 
(
SELECT *, 
     ROW_NUMBER() OVER (PARTITION BY Type ORDER BY Version) - 1 AS V 
FROM YourTable  
) 
UPDATE T 
SET Version = V 
+0

+1 - J'ai manqué le '-1' à la fin du ROW_NUMBER() quand j'ai posté mon commentaire. – JNK

+0

@JNK - Il n'était pas là alors. J'ai remarqué le départ à zéro juste après l'affichage. –

+0

Merci, a bien fonctionné! a également appris sur la partition par :) – Gal

Questions connexes