IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Firebird Discussion :

Pourquoi le résultat est-il différent ?


Sujet :

Firebird

  1. #1
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut Pourquoi le résultat est-il différent ?
    Bonjour à tous,

    j'ai deux tables contient des champs

    T1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    +----+----+
    | ID | X  |
    +----+----+
    | 01 | 09 | 
    | 02 | 10 | 
    | 03 | 02 |
    +----+----+
    T2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    +----+----+
    | ID | y  | 
    +----+----+
    | 01 | 15 |
    +----+----+
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sum(iif(T1.x between 9 and 10 ,3100/30*iif(T2.y is null,30,30-T2.y),0))
    le resulta est 4648.5(3100+1550) normalement 4650 pourquoi?

    les deux tables joind by ID

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 037
    Points : 40 944
    Points
    40 944
    Billets dans le blog
    62
    Par défaut
    Bonsoir,

    le resultat normalement 4650
    le résultat espéré peut-être

    si votre SQL était, pour tester sans somme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T1.ID,T1.X,T2.ID,T2.Y, iif(T1.x between 9 and 10 ,3100/30*iif(T2.y is null,30,30-T2.y),0) FROM T1 LEFT JOIN T2 ON T1.ID=T2.ID
    vous obtiendriez
    1 9 1 15 1545
    2 10 [null] [null] 3090
    3 2 [null] [null] 0
    Donc, si vous faites la somme (4435) déjà ainsi ce n'est pas juste du moins par rapport à l'espéré

    Ce qui cloche ? La division et l'ordre des opérandes
    pour obtenir ce que vous souhaitez il y a une erreur d'opérateur
    comme le prouve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT 9, 3100/(30/15) R9, 10 , 3100/(30/30) R10 
    FROM RDB$DATABASE
    votre code devient donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iif(T1.x between 9 and 10 ,3100/(30/iif(T2.y is null,30,30-T2.y)),0)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    [EDIT] GRILLAID
    Il y a vraisemblablement des arrondis intermédiaires qui faussent le résultat final
    Ainsi supposons
    =>
    3100 / 30 donne 103.3 en arrondi
    103.3 * 30 donne 3099
    et 3099/2 = 1549,5
    3099 + 1549,5 = 4648,5

    Bref la division par 30 est à faire seulement à la fin
    =>
    3100 * 30 donne 93000
    et 93000/2 = 46500
    (93000 + 46500) / 30 = 4650

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sum(iif(T1.x between 9 and 10 ,3100*iif(T2.y is null,30,30-T2.y),0)) / 30
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  4. #4
    S.H
    S.H est déconnecté
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 31
    Points
    31
    Par défaut
    Bonjour et merci beaucoup ,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pourquoi le Résultat est 0,099999 au lieu de 0,1
    Par bartez63 dans le forum Excel
    Réponses: 4
    Dernier message: 11/07/2018, 10h14
  2. Pourquoi le résultat est 0? Petit souci
    Par Margueritian dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 17/07/2012, 17h10
  3. Réponses: 2
    Dernier message: 17/02/2009, 21h03
  4. Réponses: 9
    Dernier message: 05/10/2005, 14h50
  5. [Plugin][VE]pourquoi la fenetre est dans la barre des taches
    Par voyageur dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 15/06/2005, 08h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo