Bonjour,
Pour situer le problème, j'ai deux tables :
STOCKS (NUM_STK, NUM_PROD, QTE)
ETATS (NUM_STK, NUM_ETAT, NUM_PROD, QTE)
STOCKS est un état du stock en temps réel. Le stock peut être réparti sur plusieurs lieux de stockage (NUM_STK)
ETATS permet de conserver un état du stock à un moment donné.
Dans STOCKS, j'ai plusieurs produits sur 6 sites (un même produit peut être présent sur plusieurs sites). J'enregistre mon état. J'ai bien mes 6 sites et tous mes produits par site.
Je veux contrôler, suite à l'enregistrement d'un état, que les 6 sites de stockage du stock actuel sont bien dans l'état. Pour les besoins du test, j'efface donc dans l'état enregistré le site 3.
J'ai essayé cette requête (essai sur l'état n°2):
Select distinct t1.NUM_STK, Count(distinct t1.NUM_STK) as C1, Count(distinct t2.NUM_STK) as C2
From STOCKS t1
LEFT JOIN (ou LEFT OUTER) ETATS t2 on t1.NUM_STK = t2.NUM_STK
Where t2.NUM_ETAT = 2
Group by t1.NUMSTK
En retour, j'ai :
NUM_STK | C1 | C2
1 1 1
2 1 1
4 1 1
5 1 1
6 1 1
Pas de site 3 !!! Je m'attendais à avoir une ligne 3, 1, 0
Je fais donc cette requête :
Select distinct t1.NUM_STK, Count(distinct t1.NUM_STK),
(Select Count(distinct t2.NUM_STK)
From ETATS t2
Where t1.NUM_STK = t2.NUM_STK
and t2.NUM_ETAT = 2)
From Stocks t1
Group by t1.NUM_STK
En retour, j'ai le résultat souhaité :
NUM_STK | C1 | C2
1 1 1
2 1 1
3 1 0
4 1 1
5 1 1
6 1 1
Je voudrais juste comprendre pourquoi le left join ne marche pas...
Simon