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 :

Instruction pour avoir 1 ligne au lieu de 2


Sujet :

Langage SQL

  1. #1
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 479
    Points : 281
    Points
    281
    Par défaut [Résolu] Instruction pour avoir 1 ligne au lieu de 2
    J'ai écrit une requête UNION dont le résultat est du type :

    Nom | Inférieur | Supérieur
    ------------------------------------------
    DUPONT | 10 | 0
    MARTIN | 0 | 25
    DUPONT | 0 | 20


    Je voudrais :

    Nom | Inférieur | Supérieur
    ------------------------------------------
    DUPONT | 10 | 20
    MARTIN | 0 | 25


    Voici ma requête :

    SELECT Nom, Count(*) Inférieur, 0 Supérieur
    FROM ......
    WHERE ......
    AND ......
    AND ......
    AND ......>=......
    GROUP BY Nom
    UNION
    SELECT Nom, 0, Count(*)
    FROM ......
    WHERE ......
    AND ......
    AND ......
    AND ......<......
    GROUP BY Nom

    Comment l'écrire pour obtenir le résultat souhaité ?

  2. #2
    Membre averti Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Points : 417
    Points
    417
    Par défaut
    Avec un SELECT DISTINCT ?

  3. #3
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 479
    Points : 281
    Points
    281
    Par défaut Non :-(
    Les lignes renvoyées par ma requête ne sont pas identiques, donc le distinct n'est pas approprié ici...

  4. #4
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Salut,

    à quoi correspondent l'INFERIEUR et SUPERIEUR retenus pour DUPONT, une somme ou un max?

  5. #5
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 479
    Points : 281
    Points
    281
    Par défaut
    A un count(*).

    Je souhaite avoir pour un nom donné, le nombre d'achats avant une date (inférieur) et après une date (supérieur).

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    le distinct ne fonctionne pas ici
    voilal une solution toute bête



    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
    SQL> select * from testa ;
     
    A                   B          C
    ---------- ---------- ----------
    DUPONT             10          0
    DUPONT              0         20
    MARTIN              0         25
     
    SQL> select distinct (a) , b , c from testa ;
     
    A                   B          C
    ---------- ---------- ----------
    DUPONT              0         20
    DUPONT             10          0
    MARTIN              0         25
     
    SQL> select a , sum(b) , sum(c) from testa 
      2  group by a ;
     
    A              SUM(B)     SUM(C)
    ---------- ---------- ----------
    DUPONT             10         20
    MARTIN              0         25

  7. #7
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Je n'avais pas fait attention mais comme tu mets 0 une fois sur 2 cela revient bien à une somme.

    Simplement tu peux faire :

    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
     
    SELECT Nom, SUM(Inférieur) Inférieur, SUM(Supérieur) Supérieur
    FROM (
    SELECT Nom, Count(*) Inférieur, 0 Supérieur
    FROM ......
    WHERE ......
    AND ......
    AND ......
    AND ......>=......
    GROUP BY Nom
    UNION
    SELECT Nom, 0, Count(*)
    FROM ......
    WHERE ......
    AND ......
    AND ......
    AND ......<......
    GROUP BY Nom 
    )
    GROUP BY Nom

  8. #8
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 479
    Points : 281
    Points
    281
    Par défaut
    C'est presque parfait

    Il faut juste ajouter AS TMP comme ceci :

    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
     
    SELECT Nom, SUM(Inférieur) Inférieur, SUM(Supérieur) Supérieur
    FROM (
    SELECT Nom, Count(*) Inférieur, 0 Supérieur
    FROM ......
    WHERE ......
    AND ......
    AND ......
    AND ......>=......
    GROUP BY Nom
    UNION
    SELECT Nom, 0, Count(*)
    FROM ......
    WHERE ......
    AND ......
    AND ......
    AND ......<......
    GROUP BY Nom
    ) AS TMP
    GROUP BY Nom

    Merci pour cette rapidité

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

Discussions similaires

  1. [JCreator]comment faire pour avoir l'aide en ligne
    Par sovo dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 0
    Dernier message: 12/08/2008, 19h40
  2. Comment fait-on pour avoir 2 formulaires sur la même ligne?
    Par fabiofabio dans le forum Mise en page CSS
    Réponses: 13
    Dernier message: 02/02/2008, 13h28
  3. instruction pour revenir à la ligne
    Par fatati dans le forum Oracle
    Réponses: 7
    Dernier message: 14/03/2007, 16h03
  4. instruction pour aller à la ligne
    Par pogy dans le forum ASP
    Réponses: 2
    Dernier message: 11/05/2006, 15h20
  5. [ORACLE 9i] Avoir 12 lignes pour 12 mois de chaque années
    Par Worldofdada dans le forum Oracle
    Réponses: 4
    Dernier message: 17/11/2005, 11h57

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