Bonjour,
Je cherche un technique performante pour réaliser la mise à jour d'un identifiant sur plusieurs lignes d'une table (SQL Server 2005) :
Table azerty : id (int identity) id2 (int) ch1 (varchar(x)) ch2 (varchar(y)) ch3 (varchar(z)) ch4 (varchar(a)) ch5 (varchar(b)) ... |
Le but est de repérer les doublons sur plusieurs champs ch1, ch2, ch3, ch4, etc... et de coller un identifiant à toutes les lignes ayant les mêmes valeurs pour ces champs.
Exemple avec champs à grouper :
1 NULL toto tata 2 NULL toto titi 3 NULL tutu titi 4 NULL toto tata 5 NULL tutu titi |
Après update je voudrais avoir :
1 1 toto tata 2 2 toto titi 3 3 tutu titi 4 1 toto tata 5 3 tutu titi |
Donc logiquement je peux partir sur :
SELECT MIN(id) AS id, ch1, ch2 INTO #tmp FROM azerty GROUP BY ch1, ch2 |
Puis :
UPDATE a SET a.id2 = t.id FROM azerty a, #tmp t WHERE a.ch1 = z.ch1 AND a.ch2 = z.ch2 |
Le problème c'est que j'ai au moins une 30aine de champs à grouper donc je trouve ça laborieux de générer une table temporaire pour ensuite mettre à jour les données avec une jointure crado.
Existe-il un moyen pour faire ça en une seule fois sans avoir une jointure sur 30 champs (qui plus est avec des tests à la con dans cas de valeurs NULL) ?
Merci d'avance 
Message édité par Twiddy le 22-07-2011 à 16:30:42