Bonjour,
J'ai besoin de votre aide pour une requête SQl, voici mon problème :
Je dispose d'une table T et trois colonnes A, B et C renseigné comme suis :
A B C
1 W NULL
1 X NULL
2 X NULL
2 Y NULL
2 Z NULL
3 M NULL
4 M NULL
5 M NULL
5 N NULL
6 O NULL
J'aimerai trouver un moyen de faire une requête d'update (sur la colonne C) pour grouper toutes les lignes qui peuvent avoir un lien (que se soit en passant par la colonne A ou B).
Plus clairement, j'aimerai avoir ce résultat :
A B C
1 W 1
1 X 1
2 X 1
2 Y 1
2 Z 1
3 M 2
4 M 2
5 M 2
5 N 2
6 O 3
Les lignes 1 et 2 sont liées par la colonne A, les lignes 2 et 3 sont liées par la colonne B et ainsi de suite, on continu jusqu'à ce qu'on en trouve plus.
- J'ai déjà trouvé une solution avec une fonction récursive en C#. Seulement le temps d’exécution laisse à désirer (la table sur laquelle je souhaite faire ça contient des millions de lignes)
- J'ai trouvé qu'il était possible en sql de faire de la récursivité. J'ai sorti ça mais ça ne fonctionne pas :
Si il se trouve des pros de SQL dans les parages, ou si vous voulez relever le défi, je vous en serait très reconnaissant.Code:WITH grappe (A, B, C, Level) AS (SELECT A, B, C, 0 as Level FROM T WHERE C IS NULL UNION ALL SELECT t.A, t.B, t.C, Level +1 FROM T t INNER JOIN grappe u ON t.A = u.A OR t.B = u.B) UPDATE T SET C = Level FROM grappe
Merci à vous !!!
-----