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

SQL Oracle Discussion :

erreur sur decode


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 38
    Points
    38
    Par défaut erreur sur decode
    Bonjour, J'ai un problème avec une requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SUM(DECODE (SUM(Y) , 0, 0, (X*Y)/SUM(Y))
    J'optiens une erreur "ORA-00937: not a single-group group function" à cause du dernier sum mais je ne vois pas de solution.
    Mon but est d'esquiver le problème de la division par zéro.
    Quelqu'un aurais t'il une piste ?

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par atlain75 Voir le message
    Quelqu'un aurait-il une piste ?
    Si tu commençais déjà par nous donné la version de bd et la requète en entier...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 38
    Points
    38
    Par défaut
    Désolé pour le manque de précision. j'essayais d'alléger la requête en ne mettant que la partie nécessaire. Je vous passe les 3 left outer join au dessus ce cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select distinct REGION, (SUM(DECODE(SUM(Y),0,0,(X *Y)/SUM(Y)))) as durée1, (SUM(DECODE(SUM(Y),0,0,(X* Y)/SUM(Y))) as duree2
    from toto
    where region like '%' and date_debut >= ? and date_fin <= ?
    group by region
    la base est une 10G

  4. #4
    Invité
    Invité(e)
    Par défaut
    Le regroupement ne porte ni sur X ni sur Y : le X*Y ne peut pas être interprété tel quel.

    Rassure-moi, le
    c'est juste pour tes tests ?

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Essayez cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      SELECT region,
             DECODE(SUM(Y), 0, 0, SUM(X*Y)/SUM(Y)) AS durée
        FROM toto
       WHERE region LIKE '%' AND date_debut >= ? AND date_fin <= ?
    GROUP BY region

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 38
    Points
    38
    Par défaut
    oui le % n'est la que pour les tests. Les requêtes sont lancées à partir de BIRT et les % seront remplacé par le nom de la région concerné quand je n'aurais plus ma division par 0.

    Waldar, le résultat est identique. ==> ORA-00937.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par atlain75 Voir le message
    Waldar, le résultat est identique. ==> ORA-00937.
    Comment ça ? Je viens de faire le test sous 10g XE et c'est correct.

    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
    CREATE TABLE TOTO
      (
        REGION VARCHAR2(20 BYTE),
        X      NUMBER,
        Y      NUMBER
      )
     
     
    select * from toto ;
     
    REGION               X                      Y                      
    -------------------- ---------------------- ---------------------- 
    a                    0                      0                      
    b                    0                      0                      
    b                    1                      45                     
    c                    0                      0                      
    c                    -4                     56                     
    c                    88                     -2                     
    c                    0                      45                     
    c                    654                    0                      
    d                    54                     4                      
     
    9 lignes sélectionnées
     
     
     SELECT region,
             DECODE(SUM(Y), 0, 0, SUM(X*Y)/SUM(Y)) AS durée
        FROM toto
    GROUP BY region
     
     
    REGION               DURÉE                  
    -------------------- ---------------------- 
    d                    54                     
    a                    0                      
    b                    1                      
    c                    -4,04040404040404040404040404040404040404

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Oui vous avez mal recopié la requête, j'ai déporté la somme qui encadrait le DECODE à l'intérieur.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 38
    Points
    38
    Par défaut
    je n'ai rien dit. j'avais pensé corrigé en mettant sum(X*Y/SUM(Y)).
    Au vue de vos messages j'ai posé l'opération et me suis rendu compte de mes erreurs.
    Je ne comprenais pas trop l'erreur 00937 en voyant les exemples du net mais cette fois je commence à bien la comprendre.
    Merci du temps passé et promis la prochaine fois je me paye un cerveau avant de poster

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

Discussions similaires

  1. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00
  2. [VBS] Erreur sur "AddWindowsPrinterConnection"
    Par Admin dans le forum VBScript
    Réponses: 5
    Dernier message: 27/03/2004, 16h15
  3. Erreur sur serveur lié
    Par k-lendos dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/03/2004, 15h21
  4. []Erreur sur second emploi collection binding
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 08/03/2004, 18h02
  5. Erreur sur le TNSListener après installation de 9iAS
    Par Patmane dans le forum Installation
    Réponses: 4
    Dernier message: 04/02/2004, 11h16

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