Bonjour,

Je sais que le sujet a déjà été traité mais il me semble que mon cas est plus compliqué

Je travaille sur une base oracle d'un JDE.

Je suis en train de faire une requête "en cascade" sur les nomenclatures de production. Le fils de BoM_1 est le père BoM_2, le fils de BoM_2 est le père de BoM_3 etc..

Le but est d'arriver au dernier niveau pour connaître les besoins en composants de dernier niveau en fonction des produits finis du premier niveau;

Les tables:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
FROM   "PRODDTA"."F3002" "F3002_1"
LEFT OUTER JOIN "PRODDTA"."F3002" "F3002_2" ON "F3002_1".IXLITM="F3002_2".IXKITL
LEFT OUTER JOIN "PRODDTA"."F3002" "F3002_3" ON "F3002_2".IXLITM="F3002_3".IXKITL
...etc.

Je "déroule" ma requête sur 6 niveaux.

Jusqu'ici tout va bien.

Le problème est que je dois faire une sélection sur les dates de validité des liens de nomenclatures, donc tester chaque niveau en fonction du nombre de niveaux:
- Si j'ai 6 niveaux je teste la date des 6 tables;
- Si j'ai 5 niveaux je teste la date des 5 premières tables;
...etc.

Donc, mon CASE pour savoir si j'ai 6 niveau:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
(CASE 
WHEN "F3002_6".IXKITL IS NOT NULL 
AND 
"F3002_5".IXKITL IS NOT NULL 
AND 
"F3002_4".IXKITL IS NOT NULL 
AND 
"F3002_3".IXKITL IS NOT NULL
 AND
"F3002_2".IXKITL IS NOT NULL
THEN 
"F3002_6".'6_Level'
Et mon WHERE lorsque j'ai 6 niveaux est (attention transformation de date de JDE qui sont au format SAAQQQ):

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
WHERE
 
((100000+(SUBSTR(TO_CHAR(CURRENT_DATE,'YYYY'),-2)*1000)+TO_CHAR(CURRENT_DATE,'DDD')>="F3002_1".IXEFFF AND 
100000+(SUBSTR(TO_CHAR(CURRENT_DATE,'YYYY'),-2)*1000)+TO_CHAR(CURRENT_DATE,'DDD')<="F3002_1".IXEFFT)
 
AND
 
(100000+(SUBSTR(TO_CHAR(CURRENT_DATE,'YYYY'),-2)*1000)+TO_CHAR(CURRENT_DATE,'DDD')>="F3002_2".IXEFFF AND 
100000+(SUBSTR(TO_CHAR(CURRENT_DATE,'YYYY'),-2)*1000)+TO_CHAR(CURRENT_DATE,'DDD')<="F3002_2".IXEFFT)
 
AND
 
(100000+(SUBSTR(TO_CHAR(CURRENT_DATE,'YYYY'),-2)*1000)+TO_CHAR(CURRENT_DATE,'DDD')>="F3002_3".IXEFFF AND 
100000+(SUBSTR(TO_CHAR(CURRENT_DATE,'YYYY'),-2)*1000)+TO_CHAR(CURRENT_DATE,'DDD')<="F3002_3".IXEFFT) 
 
AND
 
(100000+(SUBSTR(TO_CHAR(CURRENT_DATE,'YYYY'),-2)*1000)+TO_CHAR(CURRENT_DATE,'DDD')>="F3002_4".IXEFFF AND 
100000+(SUBSTR(TO_CHAR(CURRENT_DATE,'YYYY'),-2)*1000)+TO_CHAR(CURRENT_DATE,'DDD')<="F3002_4".IXEFFT)
 
AND
 
(100000+(SUBSTR(TO_CHAR(CURRENT_DATE,'YYYY'),-2)*1000)+TO_CHAR(CURRENT_DATE,'DDD')>="F3002_5".IXEFFF AND 
100000+(SUBSTR(TO_CHAR(CURRENT_DATE,'YYYY'),-2)*1000)+TO_CHAR(CURRENT_DATE,'DDD')<="F3002_5".IXEFFT) 
 
AND
 
(100000+(SUBSTR(TO_CHAR(CURRENT_DATE,'YYYY'),-2)*1000)+TO_CHAR(CURRENT_DATE,'DDD')>="F3002_6".IXEFFF AND 
100000+(SUBSTR(TO_CHAR(CURRENT_DATE,'YYYY'),-2)*1000)+TO_CHAR(CURRENT_DATE,'DDD')<="F3002_6".IXEFFT))
Comment faire ?
Merci de votre aide !