Bonjour tout le monde,
Je viens sur ce forum en espérant que vous puissiez éclairer ma lanterne. En effet, je suis sur un projet et lors de la conception de mes requêtes SQL, je me suis rendu compte d'un problème :
Deux requètes sensiblement différentes font le même calcul : les résultats sont différents.
Des tests montre que la différence se situe lors des restrictions : l'un fait un GROUP BY suivi d'un Having , tandis que l'autre à un WHERE, un GROUP BY et un HAVING
Voici les requêtes SQL :
La deuxième :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT Sum([Alias].[refus]) AS refus, sum([Alias].[resultat]) AS resultat FROM ( SELECT Sum(T_FICHIER.FIC_NBRE_PIECE_REFUSE) AS refus, Sum(T_FICHIER.FIC_NBRE_PIECE_CONTROLE) AS resultat FROM T_FICHIER GROUP BY T_FICHIER.FIC_REFERENCE, T_FICHIER.FIC_NUM_LOT, T_FICHIER.FIC_NBRE_PIECE_CONTROLE, T_FICHIER.FIC_DATE HAVING (((T_FICHIER.FIC_REFERENCE)=[reference]) AND ((T_FICHIER.FIC_NUM_LOT) Not Like '*reb*') AND (sum(T_FICHIER.FIC_NBRE_PIECE_CONTROLE)>[seuil]) AND ((Month([T_FICHIER].[FIC_DATE]))=[mois])) ) AS ALIAS;
Voila. Personnelement, je n'y vois pas de différence, mais peut-être que l'oeil d'un habitué du langage SQL y découvrira une faille.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT Sum([%$##@_Alias].refus) AS Refusées, Sum([%$##@_Alias].resultat) AS controlées FROM ( SELECT Sum([T_FICHIER].[FIC_NBRE_PIECE_REFUSE]) AS refus, Sum([T_FICHIER].[FIC_NBRE_PIECE_CONTROLE]) AS resultat FROM T_FICHIER WHERE T_FICHIER.FIC_NUM_LOT Not Like "*reb*" AND T_FICHIER.FIC_REFERENCE=[reference] AND Month(T_FICHIER.FIC_DATE)=[mois] GROUP BY [T_FICHIER].[FIC_NUM_LOT] HAVING sum(T_FICHIER.FIC_NBRE_PIECE_CONTROLE)>[seuil] ) AS [%$##@_Alias];
Merci à vous.
Partager