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

Langage SQL Discussion :

Double comptage dans une même table


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Points : 18
    Points
    18
    Par défaut Double comptage dans une même table
    bonjour à tous,

    Voici la structure ma table sous ORACLE:

    TABLE DOSSIER {
    Projet as VARCHAR2,
    Statut as VARCHAR2,
    ERI as VARCHAR2
    }

    Je souhaiterais dans une seule requête pouvoir compter le nombre de Statut quand ERI = '+' et le nombre Statut quand ERI = '-'

    J'avais tenté un truc de la sorte :

    Select Projet, Statut, count(*) as apERI from DOSSIER where ERI = '+' group by Projet,Statut
    UNION
    Select Projet, Statut, count(*) as avERI from DOSSIER where ERI = '-' group by Projet,Statut

    Je m'attendais à obtenir le résultat suivant :
    Projet Statut apERI avERI
    315 En_cours 3 4
    315 Approuvé 2 3
    ....

    J'ai en fait obtenu ceci :
    Projet Statut apERI
    315 En_cours 3
    315 En_cours 4
    315 Approuvé 2
    315 Approuvé 3

    Avez-vous une idée sur la requête à exécuter ?

    Merci par avance.
    J-Fabien

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 392
    Points
    28 392
    Par défaut
    En partant de ce que tu avais fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select Projet, Statut, sum(apERI), sum(avERI)
    from
    (    select Projet, Statut, count(*) as apERI, 0 as avERI 
        from DOSSIER 
        where ERI = '+' 
        group by Projet,Statut
    union
        select Projet, Statut, 0 as apERI, count(*) as avERI 
        from DOSSIER 
        where ERI = '-' 
        group by Projet,Statut
    )
    group by Projet,Statut
    ;
    Plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Select     Projet
        ,     Statut
        ,    sum(case ERI when '+' then 1 else 0 end) as apERI 
        ,    sum(case ERI when '-' then 1 else 0 end) as avERI 
    from     DOSSIER 
    where     ERI in ('+', '-') 
    group by Projet
        ,    Statut
    ;

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Merci pour ta réponse. j'ai cependant une erreur à l'exécution de la requête :

    ORA-00907: missing right parenthesis
    Il indique l'erreur sous le premier ERI

    SELECT Projet
    , Statut
    , sum(case ERI when '+' then 1 else 0 end) AS apERI
    , sum(case ERI when '-' then 1 else 0 end) AS avERI
    FROM DOSSIER
    WHERE ERI IN ('+', '-')
    GROUP BY Projet
    , Statut
    ;

    Vois-tu d'où cela peut venir ?
    J-Fabien

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Ta version d'Oracle peut être à l'origine de ce message d'erreur : si tu es en 8i, cette syntaxe n'est pas supportée.
    De plus, cela dépend aussi de l'outil dans lequel tu utilises ton code (ex : forms, reports, etc.)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Consultant
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    La version d'ORACLE est 9.0.2.

    La commande s'effectue au travers d'un start

    SQL> start myfile.sql

    Cela peut-il générer une erreur d'interprétation de la requête ?

    Faut-il plutôt lancer la requête directement du prompt SQL> ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Consultant
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Mille excuses !!!

    La version est 8.1.7.

    Puis-je m'en sortir avec l'autre écriture qu'avait proposé al1_24 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT Projet, Statut, sum(apERI), sum(avERI)
    FROM
    (    SELECT Projet, Statut, count(*) AS apERI, 0 AS avERI 
        FROM DOSSIER 
        WHERE ERI = '+' 
        GROUP BY Projet,Statut
    union
        SELECT Projet, Statut, 0 AS apERI, count(*) AS avERI 
        FROM DOSSIER 
        WHERE ERI = '-' 
        GROUP BY Projet,Statut
    )
    GROUP BY Projet,Statut
    ;

    Ce code fonctionne sous ORACLE 8
    Merci encore à al1_24.

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

Discussions similaires

  1. Copier un enregistrement dans une même table
    Par slammer dans le forum Langage SQL
    Réponses: 11
    Dernier message: 04/05/2010, 23h17
  2. Copie de données dans une même table
    Par Tintou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/07/2007, 17h22
  3. Nls_lang : deux codage dans une même table
    Par Oraman dans le forum Oracle
    Réponses: 6
    Dernier message: 22/08/2006, 12h36
  4. [Requête] plusieurs champs dans une même table ayants la même source
    Par Christophe93250 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 25/04/2006, 16h18
  5. [SQL] Somme de 2 colonnes dans une même table
    Par Cyrilange dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/04/2005, 08h32

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