Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/05/2011, 21h17   #1
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 976
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 976
Points : 2 125
Points : 2 125
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Par défaut comment contourner la "Division par zéro" ?

Salut

j'ai dans une vue un champ calculé
Citation:
energie/volume as taux_consommation
et comme j'ai le volume nul dans certains cas, ma requête s'arrête sur l'erreur "division par zéro" alors comment faire pour forcer la requête à finir son travail malgré cette erreur ?

pour le moment j'ai changé la valeur "0" par "-1" pour ne pas avoir cette erreur ! j'ai en quelques sortes rapporté l'erreur mais c'est pas très propre, donc je me demande si c'est possible de le contourner au niveau du SGBD par l'utilisation d'une exception mais à condition que la requête s'achève ?!

merci par avance.
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 08h04   #2
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 612
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 3 612
Points : 4 509
Points : 4 509
bonjour,

Utilises COALESCE pour null , IFF ou CASE
Code :
1
2
3
 
SELECT energie/COALESCE(volume,-1) AS taux_consommation FROM ... 
SELECT energie/IFF(volume=0,-1,volume) AS taux_consommation FROM ...
je ne suis pas sur des syntaxes exactes , l'esprit est là
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 08h38   #3
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 754
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 754
Points : 6 767
Points : 6 767
Salut

Comme on ne peut pas estimer une consommation avec un volume égal à 0, je renverrai plutôt la valeur NULL.
Code :
SELECT ENERGIE / NULLIF(VOLUME, 0) AS TAUX_CONSOMMATION FROM ...
NULLIF substitue les 0 par des NULL. La division renvoie donc également NULL.

@+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 11h07   #4
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 976
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 976
Points : 2 125
Points : 2 125
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Salut !
merci Cl@udius, ta solution est impeccable . merci à toi aussi serge même si j'ai pas testé ta proposition .

autre chose tant qu'on y est; en travaillant avec les agrégats je me suis aperçus que la moyenne arithmétique prend aussi les valeurs "vides" ce qui fausse évidemment le résultat d'où ma question : comment faire pour ne prendre que les valeurs non nulles dans la moyenne ?

merciiiiiiiiiiiiiiiiii
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 11h13   #5
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 754
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 754
Points : 6 767
Points : 6 767
Re

Sauf erreur de ma part la fonction AVG ne tient pas compte des valeurs nulles (NULL) dans son calcul.
Donc a priori pas de problème.
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 11h21   #6
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
je confirme

dans le cas contraire, cela serait une catastrophe statistique.


Just-Soft, es tu sur de n'avoir pas fait un COALESCE quelque part qui aurait remplace des NULLs par un zero ????
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 11h45   #7
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 976
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 976
Points : 2 125
Points : 2 125
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Exact, l'erreur me revient je travaille avec FastReport et javais oublié que j'ai positionné "HideZeros" à vrai
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 16h14   #8
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 976
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 976
Points : 2 125
Points : 2 125
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Re,
je fais encore appel à vous
dans la même vue j'ai une opération de type : champ1/champ2 sachant que champ1 et 2 sont de type entier donc si le résultat est < 0 le système me rend 0 alors que j'ai besoin du résultat même si si de l'ordre de 10-4 ! comment faire dans ce cas ?

merci encore.
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 16h22   #9
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 754
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 754
Points : 6 767
Points : 6 767
Fais un CAST avec la précision que tu souhaites.

Code :
1
2
SELECT F1 / CAST(F2 AS NUMERIC(15, 4)) AS DIVISION 
FROM ...
@+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 16h24   #10
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
re bonjour


la division de 2 valeurs entieres donne une valeur entiere.

Il convient donc de caster les 2 entier, ou meme seulement un des entier en reel


Code :
Cast (:valeur1 AS FLOAT) / :valeur2
alors le resultat sera un reel


mince, battu par claudius
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 17h17   #11
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 1 976
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 1 976
Points : 2 125
Points : 2 125
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
merci les champions
__________________
Bon courage ou Bonne Chance (selon le contexte)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h52.


 
 
 
 
Partenaires

Hébergement Web