Bonjour,
Dans une requête assez longue je sélectionne une grande quantité de valeurs en provenance d'une table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT @v1:=SUM(val1),@v2:=SUM(val2-val1*val2),@v3:=SUM(val3) FROM decimales
Ces valeurs sont donc affectées aux variables @vx ci dessus.
Le code comporte plusieurs requêtes imbriquées dont l'une permet de calculer des sommes, produits... à l'aide de formules telles que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT @resultat1:=SUM(val3)/@v2 FROM decimales
Le problème constaté est une différence de précision selon les formules employées :
ex :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT @resultat1:=@v3/SUM(val2-val1*val2) FROM decimales
ne donne pas (toujours) exactement la même valeur que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT @resultat1:=SUM(val3)/SUM(val2-val1*val2) FROM decimales
[edit] : la formule utilisant des variables utilisateurs ne donne pas (toujours) les mêmes résultats que la formule complète[edit]
Le problème supposé vient donc de la précision des décimales stockées dans les variables utilisateurs qui semble variable, puisque en effet si les variables sont définies avec plus de précision en utilisant CAST( xxx AS DECIMAL(10,2)) le résultat est bien le même.
LA question est donc de savoir comment déclarer ou quelle requête utiliser pour être sûr que toutes les variables utilisateurs ont bien la précision désirée (par exemple DECIMAL(10,2)) ?
Y a t il un moyen plus simple que d'écrire ceci à chaque fois :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT @v:=CAST(SUM(val2-val1*val2) as DECIMAL(10,2)) .....
Peut on l'écrire une seule fois pour toute la requête ?