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

Développement SQL Server Discussion :

Division par zero


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Consultant ERP
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Par défaut Division par zero
    Bonjour @ tous

    Voici ma requête SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    SELECT EL1, EL2, EL3, SUM(ENGAGE) AS ENGAGE, SUM(BUDGET) AS BUDGET, SUM(REEL) AS REEL, sum(BUDGET-REEL-ENGAGE) as DISPO, sum((BUDGET-REEL-ENGAGE)/BUDGET) as POURCENTAGEDISPO
    
    FROM     
        (
            SELECT     
                el1 AS EL1, 
                el2 AS EL2, 
                el3 AS EL3, 
                0 AS ENGAGE, 
                SUM(full_value) AS BUDGET, 
                0 AS REEL,
                0 as DISPO,
                0 as POURCENTAGEDISPO
                      FROM          
                              dbo.oas_balance
                      WHERE      (cmpcode = 'SOC-A') AND (yr = '2009') AND (balcode = 'BUD-INITIAL') AND (repbasis = 7)
                      GROUP BY el1, el2, el3
    
                      UNION
    
                      SELECT     
                              el1 AS EL1, 
                              el2 AS EL2, 
                              el3 AS EL3, 
                              0 AS ENGAGE, 
                              0 AS BUDGET, 
                              SUM(full_value) AS REEL,
                0 as DISPO,
                0 as POURCENTAGEDISPO
                      FROM     
                              dbo.oas_balance AS oas_balance_2
                      WHERE     (cmpcode = 'SOC-A') AND (yr = '2009') AND (balcode = 'REEL') AND (repbasis = 7)
                      GROUP BY el1, el2, el3
    
                      UNION
    
                      SELECT     
                              el1 AS EL1, 
                              el2 AS EL2, 
                              el3 AS EL3, 
                              SUM(full_value) AS ENGAGE, 
                              0 AS BUDGET, 
                              0 AS REEL,
                0 as DISPO,
                0 as POURCENTAGEDISPO
                      FROM         
                               dbo.oas_balance AS oas_balance_1
                      WHERE     (cmpcode = 'SOC-A') AND (yr = '2009') AND (balcode = 'ENGAGEMENT') AND (repbasis = 7)
                      GROUP BY el1, el2, el3) AS x
    GROUP BY EL1, EL2, EL3
    ORDER BY EL3, EL1, EL2SELECT     
        EL1, 
        EL2, 
        EL3, 
        SUM(ENGAGE) AS ENGAGE, 
        SUM(BUDGET) AS BUDGET, 
        SUM(REEL) AS REEL,
        sum(BUDGET-REEL-ENGAGE) as DISPO,
        sum((BUDGET-REEL-ENGAGE)/BUDGET) as POURCENTAGEDISPO
    
    FROM     
        (
            SELECT     
                el1 AS EL1, 
                el2 AS EL2, 
                el3 AS EL3, 
                0 AS ENGAGE, 
                SUM(full_value) AS BUDGET, 
                0 AS REEL,
                0 as DISPO,
                0 as POURCENTAGEDISPO
                      FROM          
                              dbo.oas_balance
                      WHERE      (cmpcode = 'SOC-A') AND (yr = '2009') AND (balcode = 'BUD-INITIAL') AND (repbasis = 7)
                      GROUP BY el1, el2, el3
    
                      UNION
    
                      SELECT     
                              el1 AS EL1, 
                              el2 AS EL2, 
                              el3 AS EL3, 
                              0 AS ENGAGE, 
                              0 AS BUDGET, 
                              SUM(full_value) AS REEL,
                0 as DISPO,
                0 as POURCENTAGEDISPO
                      FROM     
                              dbo.oas_balance AS oas_balance_2
                      WHERE     (cmpcode = 'SOC-A') AND (yr = '2009') AND (balcode = 'REEL') AND (repbasis = 7)
                      GROUP BY el1, el2, el3
    
                      UNION
    
                      SELECT     
                              el1 AS EL1, 
                              el2 AS EL2, 
                              el3 AS EL3, 
                              SUM(full_value) AS ENGAGE, 
                              0 AS BUDGET, 
                              0 AS REEL,
                0 as DISPO,
                0 as POURCENTAGEDISPO
                      FROM         
                               dbo.oas_balance AS oas_balance_1
                      WHERE     (cmpcode = 'SOC-A') AND (yr = '2009') AND (balcode = 'ENGAGEMENT') AND (repbasis = 7)
                      GROUP BY el1, el2, el3) AS x
    GROUP BY EL1, EL2, EL3
    ORDER BY EL3, EL1, EL2
    


    Mon pb est sur la ligne en début de requête :
    sum((BUDGET-REEL-ENGAGE)/BUDGET) as POURCENTAGEDISPO.

    En effet parfois BUDGET = 0 donc j'ai une division par zéro.

    Comment puis éviter cela à partir de ma requête ?

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    en transformant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sum((BUDGET-REEL-ENGAGE)/BUDGET)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NULLIF(sum((BUDGET-REEL-ENGAGE)/BUDGET), 0)
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Erreur divisée par zero
    Par winow dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/09/2007, 21h44
  2. Division par zéro
    Par hanane78 dans le forum MATLAB
    Réponses: 1
    Dernier message: 19/07/2007, 12h58
  3. la division par zero pour effectuer un pourcentage dans une requete
    Par VIRGINIE87 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 24/05/2007, 22h44
  4. Réponses: 3
    Dernier message: 25/09/2006, 16h39
  5. [Math][Info]division par zéro
    Par niko8181 dans le forum Général Java
    Réponses: 9
    Dernier message: 23/05/2005, 09h58

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