Bonjour,
Je dois éditer des Bons de sortie magasin (BSM).
A chaque item de BSM correspond une référence (magasin,article,nature) les articles étant stockés par lot.
Pour un item de BSM, donc une référence, il peut y avoir plusieurs lots.
Je veux ecrire une requête qui ne me ramène que le numéro du lot dont la date d'entrée en stock est la plus ancienne. Jai donc mis dans la clause where, une sous-requête à cet effet, mais je n'arrive pas à la faire fonctionner correctement.
Lorsque je lance la requête principale sans la sous-requête, j'obtiens plusieurs lots par item de BSM.
Si j'ajoute la sous-requête, je n'ai plus qu'un item de BSM : celui dont l'un des lots a la date la plus ancienne pour l'ensemble des des items/lots concernés.
Je n'arrive pas à comprendre pourquoi la sous-requête s'applique globalement plutôt que pour chacun des items extrait lorsqu'elle n'est pas présente.
Voici l'ordre sql en question :
Quelqu'un peut-il m'expliquer ce qu'il se passe, svp ?
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 select e_bsm.NUMBSM, substr(e_bsm.NUMBSM,13,8) ICEBSM, e_bsm_item.ITMBSM, e_bsm_item.CODMAG, e_bsm_item.CODART, e_bsm_item.NATURE, e_lot.NUMLOT, e_lot.ITMLOT, e_lot.DATPERP, e_lot.DATSTO from e_bsm left outer join e_bsm_item on e_bsm_item.COCENT = e_bsm.COCENT and e_bsm_item.COETAB = e_bsm.COETAB and e_bsm_item.NUMBSM = e_bsm.NUMBSM and e_bsm_item.QTEDEM - e_bsm_item.QTEMANQ > 0 left outer join e_lot on e_lot.COCENT = e_bsm_item.COCENT and e_lot.COETAB = e_bsm_item.COETAB and e_lot.CODART = e_bsm_item.CODART and e_lot.CODMAG = e_bsm_item.CODMAG and e_lot.NATURE = e_bsm_item.NATURE where e_bsm.COCENT = '110' and e_bsm.COETAB = '001' and e_bsm.NUMBSM = '0806002600010001' and e_lot.QTEDISPO > 0 and e_lot.DATSTO = ( select distinct min(e_lot.DATSTO) from e_lot where e_lot.COCENT = e_bsm_item.COCENT and e_lot.COETAB = e_bsm_item.COETAB and e_lot.CODART = e_bsm_item.CODART and e_lot.CODMAG = e_bsm_item.CODMAG and e_lot.NATURE = e_bsm_item.NATURE ) order by e_bsm_item.ITMBSM,e_bsm_item.CODMAG
En vous remerciant,
Partager