|
| Iniciado por Pierre, 24,mar. 2020 11:41 - 3 respuestas |
| |
| | | |
|
| |
Miembro registrado 185 mensajes |
|
| Publicado el 24,marzo 2020 - 11:41 |
Bonjour,
Vous trouverez ci dessous 2 requêtes avec le résultat correspondant.
Dans la requête partielle, j'ai une QtéRecue avec 2 valeurs qui correspondent à mon set de données.
SELECT LigneCommande.IDPieces AS IDPiece, LigneCommande.Quantité AS QtéCommandée, LigneCommande.IdLigneBcde AS IdLigne, SuiviCde.QtéRecue AS QtéRecue, CASE LigneCommande.DatePrévue WHEN '' THEN Bcde.LivraisonDateEstimée ELSE LigneCommande.DatePrévue END AS DatePrévue FROM LigneCommande LEFT OUTER JOIN( SELECT SUM(StockMvt.Quantité) AS QtéReçue, StockMvt.IdLigneBcde AS IdLigneBcde FROM StockMvt WHERE IdLigneBcde<>0 AND StockMvt.Type=2 GROUP BY IdLigneBcde ) AS SuiviCde ON SuiviCde.IdLigneBcde=IdLigne AND LigneCommande.Quantité>SuiviCde.QtéRecue LEFT OUTER JOIN Bcde ON Bcde.IDBcde=LigneCommande.IDBcde WHERE LigneCommande.IDPieces=65677 // )

Dans la requête complète, la somme de QtéRecue me donne NULL
//Connaitre la DATE probable de livraison d'une pièce, multi-commande, multi-réception SELECT MIN(NdxMeilleurDelai.DatePrévue) AS DélaiCourt, MAX(NdxMeilleurDelai.DatePrévue) AS DélaiLong, NdxMeilleurDelai.IDPiece AS IdPiece, SUM(NdxMeilleurDelai.QtéCommandée) AS QtéCommandée, SUM(NdxMeilleurDelai.QtéRecue) AS QtéRecue FROM Pieces LEFT OUTER JOIN(
SELECT LigneCommande.IDPieces AS IDPiece, LigneCommande.Quantité AS QtéCommandée, LigneCommande.IdLigneBcde AS IdLigne, SuiviCde.QtéRecue AS QtéRecue, CASE LigneCommande.DatePrévue WHEN '' THEN Bcde.LivraisonDateEstimée ELSE LigneCommande.DatePrévue END AS DatePrévue // sum(suivicde.Qtérecue) FROM LigneCommande LEFT OUTER JOIN( SELECT SUM(StockMvt.Quantité) AS QtéReçue, StockMvt.IdLigneBcde AS IdLigneBcde FROM StockMvt WHERE IdLigneBcde<>0 AND StockMvt.Type=2 GROUP BY IdLigneBcde ) AS SuiviCde ON SuiviCde.IdLigneBcde=IdLigne AND LigneCommande.Quantité>SuiviCde.QtéRecue LEFT OUTER JOIN Bcde ON Bcde.IDBcde=LigneCommande.IDBcde
) AS NdxMeilleurDelai ON NdxMeilleurDelai.Idpiece=Pieces.IDPieces WHERE Pieces.IDPieces IN (65677) GROUP BY IdPiece

Quelqu’un peut-il m'aider à comprendre ce que je fais de travers ?
Merci d'avance
-- Pierre |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 134 mensajes |
|
| Publicado el 24,marzo 2020 - 11:52 |
Bonjour,
Peut être un
SUM( NVL( StockMvt.Quantité, 0 ) ) AS QtéReçue, Qui permet de mettre un 0 par défaut si c'est NULL |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 24,marzo 2020 - 11:58 |
Bonjour, Cela provient de ton NULL. Dans la plupart des cas. NULL + n'importe quoi = NULL. NULL ne vaut pas 0 mais "Valeur inconnue". Si j'ajoute une valeur à quelque chose dont je ne connais pas la valeur. Je ne connaîtrait pas le résultat. Afin d'éviter cela, il faut ajouter créer une sous-requête avec la condition IS NOT NULL pour calculler ta quantité reçue, tout en conservant ta requête initiale, sinon, le total des qtés commandées ne correspondra pas aux données réelles.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 185 mensajes |
|
| Publicado el 24,marzo 2020 - 14:40 |
Merci à tous les deux pour votre contribution.
NVL n'a pas donné les résultats escomptés. Pour faire la sous requête, suite à des messages d'erreur du compilateur, j'ai revu le code de l'existant et voici la solution
//Connaitre la DATE probable de livraison d'une pièce, multi-commande, multi-réception SELECT MIN(NdxMeilleurDelai.DatePrévue) AS DélaiCourt, MAX(NdxMeilleurDelai.DatePrévue) AS DélaiLong, // NdxMeilleurDelai.IDPiece as IdPiece, Pieces.IDPieces AS IdPiece, SUM(NdxMeilleurDelai.QtéCommandée) AS QtéCommandée, SUM(NdxMeilleurDelai.QtéRecue) AS QtéRecue FROM Pieces LEFT OUTER JOIN( SELECT LigneCommande.IDPieces AS IDPiece, LigneCommande.Quantité AS QtéCommandée, LigneCommande.IdLigneBcde AS IdLigne, SuiviCde.QtéRecue AS QtéRecue, CASE LigneCommande.DatePrévue WHEN '' THEN Bcde.LivraisonDateEstimée ELSE LigneCommande.DatePrévue END AS DatePrévue FROM LigneCommande LEFT OUTER JOIN( SELECT SUM(StockMvt.Quantité) AS QtéReçue, StockMvt.IdLigneBcde AS IdLigneBcde FROM StockMvt WHERE IdLigneBcde<>0 AND StockMvt.Type=2 GROUP BY IdLigneBcde ) remplacer >>> AS SuiviCde ON SuiviCde.IdLigneBcde=IdLigne AND LigneCommande.Quantité>SuiviCde.QtéRecue par >>> AS SuiviCde ON SuiviCde.IdLigneBcde=LigneCommande.IdLigneBcde and ligneCommande.Quantité>SuiviCde.QtéRecue
LEFT OUTER JOIN Bcde ON Bcde.IDBcde=LigneCommande.IDBcde // where LigneCommande.IDPieces=65677 ) AS NdxMeilleurDelai ON NdxMeilleurDelai.Idpiece=Pieces.IDPieces WHERE Pieces.IDPieces IN (65677) GROUP BY Pieces.IDPieces
Bonne aprèm
-- Pierre |
| |
| |
| | | |
|
| | | | |
| | |
|