Bonjour à tous,
comment éliminer l'erreur "le diviseur est égal à zéro" dans une instruction du type
merciCode:
1
2 SELECT NVL(SUM(DECODE(M.SENS, 2 ,M.MT_MN)) / SUM(DECODE(M.SENS, 2,(M.QTE*M.QTE2))) ,0) where .....
Version imprimable
Bonjour à tous,
comment éliminer l'erreur "le diviseur est égal à zéro" dans une instruction du type
merciCode:
1
2 SELECT NVL(SUM(DECODE(M.SENS, 2 ,M.MT_MN)) / SUM(DECODE(M.SENS, 2,(M.QTE*M.QTE2))) ,0) where .....
Bonjour,
Pour ma part, étant donné que si la somme est nulle, le select n'a pas de sens,
Si on est sûr que M.QTE et M.QTE2 ne peuvent pas être négatives, alors il suffit d'éliminer les lignes qui contiennent une de ces quantités à nul en ajoutant simplement un filtre supplémentaire à la clause WHERE :
ou encore :Code:
1
2 WHERE ((M.QTE <> 0) AND (M.QTE2 <> 0)) AND ....
CordialementCode:
1
2 WHERE (M.QTE*M.QTE2 <> 0 )AND ....
Il faut d'abord que vous definissiez la regle a appliquer lorsque la valeur du diviseur est 0.
Apres vous pouvez faire ce genre de chose
Bon courageCode:
1
2
3
4
5
6
7
8
9
10
11
12 SELECT CASE WHEN COALESCE (SUM(DECODE(M.SENS, 2,(M.QTE*M.QTE2))),0) = 0 THEN 0 ELSE NVL(SUM(DECODE(M.SENS, 2 ,M.MT_MN)) / SUM(DECODE(M.SENS, 2,(M.QTE*M.QTE2))) ,0) END FROM ... WHERE .....
merci à tous, j'ai utilisé l'instruction case et tout est OK.