sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 2015
-
7 mars 2013 à 17:40
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 2015
-
8 mars 2013 à 10:32
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
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
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 7 mars 2013 à 21:02
Salut,
il me semble que la valeur NULL dans un count() fait perdre la ligne complète
(la valeur d'agrégation ne peut pas etre nulle ou un message du genre) car sinon, c'est comme si tu faisait : Count(distinct NULL)
dans ta première requete, peut etre qu'un :
select distinct
t1.NUM_STK,
Count(distinct t1.NUM_STK) as C1,
C2 = Count(distinct isnull(t2.NUM_STK,0)) /*<----- ICI*/
from /*...*/