2 votes

Group By renvoie deux lignes au lieu de la ligne attendue.

Voici la requête :

SELECT    xxx.NSN, xxx.CN
    , xxx.PN
    , xxx.[BNAME]
    , xxx.[BTYPE]
    , xxx.[BSYS]
    , yyy.[BCODE]
    , Sum(yyy.QTY) AS SumOfQTY
    , Sum(xxx.[UNIT COST]) AS [SumOfUNITCOST]
    , xxx.SS
    , yyy.[Hold]
    , yyy.[SCI]
FROM xxx INNER JOIN yyy ON xxx.CN = yyy.CN
WHERE xxx.PN='11'
GROUP BY  xxx.NSN, xxx.CN
    , xxx.PN
    , xxx.[BNAME
    , xxx.[BTYPE]
    , xxx.[BSYS]
    , yyy.[BCODE]
    , xxx.SS
    , yyy.[Hold]
    , yyy.[SCI]
    , yyy.LOC
HAVING (((yyy.[Hold]) Is Null) 
   AND ((yyy.[SCI]) Is Null) 
   AND ((yyy.LOC) != 'SHIPPED'))
ORDER BY xxx.PN;

Et voici les données renvoyées :

NSN CN  PN  BNAME   BTYPE   BSYS    BCODE   SumOfQTY    SumOfUNITCOST   SS  Hold    SCI
-----------------------------------------------------------------------------------------
304 CO  11  LINK    AB-12   SUB     F       9           4536.00         B17 NULL    NULL
304 CO  11  LINK    AB-12   SUB     F       5           2520.00         B17 NULL    NULL

Maintenant, en regardant les données, je m'attendrais à obtenir ce résultat :

NSN CN  PN  BNAME   BTYPE   BSYS    BCODE   SumOfQTY    SumOfUNITCOST   SS  Hold    SCI
-----------------------------------------------------------------------------------------
304 CO  11  LINK    AB-12   SUB     F       14          7056.00         B17 NULL    NULL

Pourquoi sépare-t-il les deux au lieu de les regrouper ?

2voto

Gordon Linoff Points 213350

Vraisemblablement, les dossiers sont dans différents LOC . Donc, enlevez ça de la GROUP BY .

Ensuite, vous devez faire face à la HAVING clause. Peut-être avez-vous l'intention :

HAVING (yyy.[Hold]) Is Null) AND
       (yyy.[SCI]) Is Null) AND
       SUM(CASE WHEN yyy.LOC = 'SHIPPED' THEN 1 ELSE 0 END) = 0

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X