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 :
Je cherche donc se que j'ai pour la date 20181008 pour le site 1 et l'usine 4.
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
Mon résultat, je vous met la première ligne :
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 :
Je trouve les bonnes valeur pourtant.
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)
Dans la tableB il y a bien les données qu'il faut également :
Est ce que vous seriez me dire si ma jointure à l'air d'être bonne ? Car je suis un peut perdu.
Merci,
Cordialement,
Partager