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.