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 :

Faire un COUNT sur le résultat d'une requête (dont un UNION)


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de korospoukine
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2006
    Messages : 176
    Points : 175
    Points
    175
    Par défaut Faire un COUNT sur le résultat d'une requête (dont un UNION)
    Bonjour,

    J'ai trouvé comment avoir les résultats entre deux bases, une qui recense mes châssis et l'autre qui recense ce qu'il y a dans les châssis, avec la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ActiveOnBoards.Repartition, COUNT(DISTINCT  ActiveOnBoards.EnclosureName) AS Chassis, COUNT(*) AS Nombre  
    FROM ActiveOnBoards, Blades 
    WHERE ActiveOnBoards.EnclosureName=Blades.Enclosure 
    GROUP BY ActiveOnBoards.Repartition
    J'ai fait la même chose avec la base de reservation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ActiveOnBoards.Repartition, COUNT(DISTINCT  ActiveOnBoards.EnclosureName) AS Chassis, COUNT(*) AS Nombre  
    FROM ActiveOnBoards, BladesReserved 
    WHERE ActiveOnBoards.EnclosureName=BladesReserved.Enclosure 
    GROUP BY ActiveOnBoards.Repartition
    Jusqu'ici tout va bien.
    Ensuite, j'ai voulu avoir le résultat de mes deux requêtes dans une seule table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, Blades.slot
    FROM ActiveOnBoards, Blades
    WHERE ActiveOnBoards.EnclosureName=Blades.Enclosure 
    UNION 
    SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, BladesReserved.slot
    FROM ActiveOnBoards, BladesReserved
    WHERE ActiveOnBoards.EnclosureName=BladesReserved.Enclosure
    Ceci fonctionne très bien.
    Par contre, où j'ai plus de mal, c'est que je voudrais pouvoir compter le nombre d'enclosurename et de slot pour chaque répartition.
    J'ai testé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT Repartition, COUNT(DISTINCT  EnclosureName) AS Chassis, COUNT(*) AS Nombre
    FROM
    (
    SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, Blades.slot
    FROM ActiveOnBoards, Blades
    WHERE ActiveOnBoards.EnclosureName=Blades.Enclosure 
    UNION 
    SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, BladesReserved.slot
    FROM ActiveOnBoards, BladesReserved
    WHERE ActiveOnBoards.EnclosureName=BladesReserved.Enclosure)
    Cela ne focntionne pas avec ou sans les parenthèses.

    Avez-vous une idée ? Une piste ? Ou alors m'orienter sur une autre méthode ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Certains SGBD (j'ai SQL-Server en tête) imposent de donner un nom à une sous-requête dans le FROM :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT Repartition, COUNT(DISTINCT  EnclosureName) AS Chassis, COUNT(*) AS Nombre
    FROM
    (
    SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, Blades.slot
    FROM ActiveOnBoards, Blades
    WHERE ActiveOnBoards.EnclosureName=Blades.Enclosure 
    UNION 
    SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, BladesReserved.slot
    FROM ActiveOnBoards, BladesReserved
    WHERE ActiveOnBoards.EnclosureName=BladesReserved.Enclosure) as SR

  3. #3
    Membre habitué Avatar de korospoukine
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2006
    Messages : 176
    Points : 175
    Points
    175
    Par défaut
    Merci cela fonctionne.
    Par contre il faut bien penser à mettre un GROUP BY à la fin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT Repartition, COUNT(DISTINCT  EnclosureName) AS Chassis, COUNT(*) AS Nombre
    FROM
    (
    SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, Blades.slot
    FROM ActiveOnBoards, Blades
    WHERE ActiveOnBoards.EnclosureName=Blades.Enclosure 
    UNION 
    SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, BladesReserved.slot
    FROM ActiveOnBoards, BladesReserved
    WHERE ActiveOnBoards.EnclosureName=BladesReserved.Enclosure) AS SR
    GROUP BY Repartition

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

Discussions similaires

  1. faire une requête sur le résultat d'une requête
    Par clanou01 dans le forum Requêtes
    Réponses: 6
    Dernier message: 28/08/2012, 11h44
  2. Comment faire boucler un job sur le résultat d'une requête SQL ?
    Par galadorn dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 27/04/2011, 11h42
  3. Requête sur les résultats d'une requête
    Par kiro57 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 17/10/2007, 17h48
  4. Réponses: 2
    Dernier message: 30/08/2007, 23h03
  5. [Etat] Basé sur le résultat d'une requête
    Par Pascal26 dans le forum WinDev
    Réponses: 13
    Dernier message: 12/04/2007, 09h04

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