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 :

2 Requetes en 1


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 67
    Points : 40
    Points
    40
    Par défaut 2 Requetes en 1
    Bonjour,
    J'ai un petit problème pour créer une requete.
    Voici ma requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT dbo.bill.name , COUNT(dbo.bob.type) AS [NB bob type Cc]
    FROM ...
    GROUP BY ...
    HAVING (dbo.bob.vartype = 'Cc')
    La requete marche parfaitement.
    Seulement j'aimerais faire le même COUNT mais avec cette fois vartype='Bb' par exemple et l'afficher à côté du premier count.
    Et là je ne vois pas comment faire.
    Je ne peus pas vraiment mettre dbo.bob.vartype = 'Cc' AND dbo.bob.vartype = 'Bb' parceque j'aurais un COUNT total (et je veux un count séparé).
    ex: NB bob type Cc NB bob type Bb
    5 8
    4 9
    ...

    avez vous une idée de comment faire?
    J'espère que j'ai été claire.

    Merci par avance.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 74
    Points : 38
    Points
    38
    Par défaut
    Slt,

    as tu essayé de mettre deux 'HAVING' pour les deux counts que tu as dans ta requête ?
    Sinon va dans ce post-ci j'ai eu le même problème que toi :
    http://www.developpez.net/forums/d66...ount-probleme/

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 741
    Points
    11 741
    Par défaut
    HAVING est de toute façon une erreur, il aurait fallu utiliser un WHERE.

    Pour mettre les deux en une, il faut utiliser CASE WHEN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT dbo.bill.name , 
      COUNT(CASE WHEN dbo.bob.vartype = 'Cc' THEN bob.type ELSE NULL END) AS [NB bob type Cc],
      COUNT(CASE WHEN dbo.bob.vartype = 'Bb' THEN bob.type ELSE NULL END) AS [NB bob type Bb]
    FROM ...
    GROUP BY ...
    Au passage, quelle est la différence entre vartype et type ? Cette colonne type peut-elle être NULL ?

  4. #4
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 67
    Points : 40
    Points
    40
    Par défaut
    Oui il peut être égal à null.
    La différence entre type et vartype c'est du genre:
    type: Renault vartype:laguna equivalent à Cc
    type:Renault vartype:clio equivalent à Bb

    Je vais essayer le case sa me semble interessant.

    Merci à vous deux en tout cas.

  5. #5
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 67
    Points : 40
    Points
    40
    Par défaut
    En fait le case ne marche pas.

    Je vais essayer de vous reexpliquer plus simplement.
    Je veux compter plusieurs fois le même champs.
    ex:
    renault laguna
    renault laguna
    renault clio
    renault laguna

    Je veux que ma requete renvoie:

    marque nb laguna nb clio
    renault 3 1


    Mon problème est le suivant:
    Vu que laguna et clio sont dans la même colonne.
    Donc comment faire pour faire deux count sur une même colonne avec deux conditions differentes?


    Merci

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 741
    Points
    11 741
    Par défaut
    j'adapte à ton exemple simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT marque, 
      COUNT(CASE WHEN modele = 'laguna' THEN 1 ELSE NULL) as nb_laguna,
      COUNT(CASE WHEN modele = 'clio'   THEN 1 ELSE NULL) as nb_clio
    FROM ...
    GROUP BY marque

  7. #7
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    C'est peut être une histoire de goût... mais je trouve plus naturel de sommer des 1 et des 0 que d'utiliser le fait que count(ensembleexpr) ne compte que les expr non NULL...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT marque, 
      SUM(CASE modele WHEN  'laguna' THEN 1 ELSE 0 END) AS nb_laguna,
      SUM(CASE modele WHEN  'clio'   THEN 1 ELSE 0 END) AS nb_clio
    FROM ...
    GROUP BY marque

  8. #8
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 741
    Points
    11 741
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Salut !
    C'est peut être une histoire de goût... mais je trouve plus naturel de sommer des 1 et des 0 que d'utiliser le fait que count(ensembleexpr) ne compte que les expr non NULL...
    En fait j'ai les mêmes goûts (au moins celui-là)... mais le premier exemple n'était pas très clair et ensuite je n'ai pas voulu changer de fonction au milieu du gué.

Discussions similaires

  1. requete avec OBCD et visual c++
    Par Anonymous dans le forum MFC
    Réponses: 12
    Dernier message: 18/11/2004, 16h15
  2. Requete requête sous sybase
    Par eddie dans le forum Sybase
    Réponses: 3
    Dernier message: 02/04/2003, 14h51
  3. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24
  4. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43
  5. [Kylix] Requetes Kylix pour postgres
    Par Miltown dans le forum EDI
    Réponses: 1
    Dernier message: 29/05/2002, 20h22

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