Bonjour,

j'ai un problème avec la jointure de ma requête sql.
J'ai une tableA avec les champs :
- EF5USI
- EF5ART
- EF5TIS
- EF5RES
- EF5DUR
- EF5DAT
- EF5PDA
- EF5CRU
- EF5CRD
- EF5MAJ
- EF5MJU
- EF5SUP
- EF5SUU
- EF5COM

Et j'ai une tableB avec les champs :
- CODE
- NSITE
- NUSINE
- NARTICLE
- NCONDI
- CADENCE
- ACTIF

J'aimerais faire une jointure sur site, usine, article et condi (j'ai les équivalent dans la tableA) sauf que dans la tableA par exemple le site 14 et usine 04 il est stocker dans EF5USI sous la forme 1404 et dans la tableB il y as nSite=14 et nUsine=04. Le fonctionnement est le même pour article et conditionnement. J’espère avoir bien expliquer se que contienne mes tables.

J'aimerais donc avoir tout se qu'il y a dans la tableA mais également dans la tableB en regroupant sur site, usine, article et conditionnement.

Je vous donne donc se que j'ai écris :

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
 
SELECT * 
 
 FROM chemin.tableA a
  LEFT JOIN chemin.tableB B ON B.NSITE = 
  CAST( TRIM(LEADING '0' FROM 
  CASE 
 	WHEN LENGTH(TRIM(ef5usi))=3 THEN SUBSTR(TRIM(ef5usi), 1, 1)  
 	WHEN LENGTH(TRIM(ef5usi))=4 THEN SUBSTR(TRIM(ef5usi), 1, 2)  
 END ) AS int)
  AND B.NUSINE = 
  CAST( TRIM(LEADING '0' FROM 
  CASE 
 	WHEN LENGTH(TRIM(ef5usi))=3 THEN SUBSTR(TRIM(ef5usi), 2, 4)  
 	WHEN LENGTH(TRIM(ef5usi))=4 THEN SUBSTR(TRIM(ef5usi), 3, 4)  
 END ) AS int)
   AND B.NARTICLE = 
  CAST( TRIM(LEADING '0' FROM SUBSTR(TRIM(EF5ART), 1, 4) ) AS int)
   AND B.NCONDI =
  CAST( TRIM(LEADING '0' FROM 
  CASE 
 	WHEN LENGTH(TRIM(ef5art))=7 THEN SUBSTR(TRIM(ef5art), 4, 7)  
 	WHEN LENGTH(TRIM(ef5art))=6 THEN SUBSTR(TRIM(ef5art), 4, 6)  
 END ) AS int)
 
 WHERE ef5dat = 20181008 AND ef5usi =  0104
Je cherche donc se que j'ai pour la date 20181008 pour le site 1 et l'usine 4.

Mon résultat, je vous met la première ligne :

Nom : sql.PNG
Affichages : 150
Taille : 23,7 Ko
Nom : sql2.PNG
Affichages : 145
Taille : 8,3 Ko

On peut voir que tout les champs de la tableB sont égal à null. C'est que ma jointure est fausse?

Quand dans mon select je met :

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
 
CAST( TRIM(LEADING '0' FROM 
 CASE 
 	WHEN LENGTH(TRIM(ef5usi))=3 THEN SUBSTR(TRIM(ef5usi), 1, 1)  
 	WHEN LENGTH(TRIM(ef5usi))=4 THEN SUBSTR(TRIM(ef5usi), 1, 2)  
 END) AS int), 
 CAST( TRIM(LEADING '0' FROM
 CASE 
 	WHEN LENGTH(TRIM(ef5usi))=3 THEN SUBSTR(TRIM(ef5usi), 2, 4)  
 	WHEN LENGTH(TRIM(ef5usi))=4 THEN SUBSTR(TRIM(ef5usi), 3, 4)  
 END) AS int),
 CAST( TRIM(LEADING '0' FROM  SUBSTR(TRIM(EF5ART), 1, 4)) AS int),  
 CAST( TRIM(LEADING '0' FROM 
 CASE 
 	WHEN LENGTH(TRIM(ef5art))=7 THEN SUBSTR(TRIM(ef5art), 4, 7)  
 	WHEN LENGTH(TRIM(ef5art))=6 THEN SUBSTR(TRIM(ef5art), 4, 6)  
 END) AS int)
Je trouve les bonnes valeur pourtant.

Nom : sql3.PNG
Affichages : 147
Taille : 2,1 Ko

Dans la tableB il y a bien les données qu'il faut également :

Nom : sql4.PNG
Affichages : 149
Taille : 3,9 Ko

Est ce que vous seriez me dire si ma jointure à l'air d'être bonne ? Car je suis un peut perdu.

Merci,

Cordialement,