Bonjour à tous,
je fais face à un problème que je n'arrive pas à résoudre. Voici la table est les données que j'utilise pour tester:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CREATE TABLE test ( COMMANDE int NOT NULL, COLIS int NOT NULL, CONSTRAINT PK_test PRIMARY KEY CLUSTERED (COMMANDE ASC, COLIS ASC) ); insert into test(COMMANDE,COLIS) values (5001,8001),(5002,8001),(5002,8002),(5001,8003),(5003,8003),(5003,8004),(5004,8004),(5005,8004),(5005,8005),(5005,8006)
Dans cette table, nous associons des commandes à des colis. Cependant, une commande peut être composée de plusieurs colis et un colis peut contenir plusieurs commandes.
Je souhaiterais pouvoir récuperer toutes les commandes liées de près ou de loin à un colis passé en paramètre.
Pour ce faire, j'ai trouvé la page suivante: http://msdn.microsoft.com/fr-fr/library/ms175972.aspx
Cette page semble poser les bases de mon problème mais j'ai l'impression d'avoir besoin d'une double recursivité.
voici ce que j'ai essayé de faire sans succès:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 USE ma_bdd; GO WITH DirectReports (COMMANDE, COLIS) AS ( -- Anchor member definition SELECT d.COMMANDE, d.COLIS FROM test AS d UNION ALL SELECT d.COMMANDE, d.COLIS FROM test AS d INNER JOIN revertReports AS e ON d.COMMANDE = e.COMMANDE) GO WITH revertReports (COMMANDE, COLIS) AS ( -- Anchor member definition SELECT d.COMMANDE, d.COLIS FROM test AS d UNION ALL SELECT d.COMMANDE, d.COLIS FROM test AS d INNER JOIN DirectReports AS e ON d.COLIS = e.COLIS ) -- Statement that executes the CTE SELECT COMMANDE, COLIS FROM DirectReports WHERE COLIS = 8006; GO
En esperant que vous pourrez m'aider à surmonter cela, Merci.
Partager