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 :

Regrouper les résultats de plusieurs COUNT fait sur différentes tables


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Regrouper les résultats de plusieurs COUNT fait sur différentes tables
    Bonjour,

    Afin de réaliser un rapport automatique, je dois obtenir à l'aide d'une requête SQL le nombre d'interventions en fonction du type d'intervention. Ce serait simple si je devais le faire sur une seule table mais en l'occurrence ma requête doit être effectuée sur 5 tables (une table pour chaque type de mobilier (abi bus, potelet ...) parce que les interventions de mon utilisateur sont différentes pour chaque mobilier (pour le détail)). Ne pouvant effectuer des COUNT de plusieurs table différentes dans un même SELECT, j'ai effectué plusieurs SELECT que j'ai réunis par un UNION ALL. Voici en détail ma requê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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    (SELECT
         count(met_trans_interventions_abribus."objectid") AS nb_intervention_abribus,
         met_trans_interventions_abribus."type_inter" as type_inter
     
    FROM
         "metier"."met_trans_interventions_abribus" met_trans_interventions_abribus
     
    GROUP BY
         type_inter
     
    ORDER BY
         type_inter ASC)
    UNION all(
    SELECT
     
         count(met_trans_interventions_potelet."objectid") AS nb_intervention_potelet,
         met_trans_interventions_potelet."type_inter" as type_inter   
     
     
    FROM
         "metier"."met_trans_interventions_potelet" met_trans_interventions_potelet
     
    GROUP BY
         type_inter
     
    ORDER BY
         type_inter ASC)
    UNION all(
    SELECT
     
         count(met_trans_interventions_romus."objectid") AS nb_intervention_romus,
         met_trans_interventions_romus."type_inter" as type_inter
     
    FROM
         "metier"."met_trans_interventions_romus" met_trans_interventions_romus
     
    GROUP BY
         type_inter
    ORDER BY
         type_inter ASC)
    UNION all(
    SELECT
     
         count(met_trans_interventions_way1."objectid") AS nb_intervention_way1,
         met_trans_interventions_way1."type_inter" as type_inter
    FROM
         "metier"."met_trans_interventions_way1" met_trans_interventions_way1
    GROUP BY
         type_inter
    ORDER BY
         type_inter ASC)
    UNION all(
    SELECT
     
         count(met_trans_interventions_way2."objectid") AS nb_intervention_way2,
         met_trans_interventions_way2."type_inter" as type_inter
    FROM
         "metier"."met_trans_interventions_way2" met_trans_interventions_way2
    GROUP BY
         type_inter
    ORDER BY
         type_inter ASC)
    Le résultat que j'obtiens n'est pas tout à fait celui que j'espérais. En effet, voici ce qu'il me renvoie :
    nb_intervention_abribus type_inter
    23 Intervention sur tournée
    11
    6 Intervention sur tournée
    3
    2 Intervention d'urgence
    31 Intervention sur tournée
    5
    1
    1

    Il me met donc bout à bout les résultats de chacun de mes SELECT, or ce que j'aimerais c'est qu'il me les regroupe en fonction du type d'intervention. Voici le résultat que j'aimerais obtenir :
    nb_intervention type_inter
    60 Intervention sur tournée
    2 Intervention d'urgence
    21

    J'ai eu beau chercher dans les différentes fonctions SQL, je ne vois pas comment faire.
    Pourriez-vous m'aider ?

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Bonjour,

    personnellement, je ferais une vue qui fait un UNION des tables différentes, et, seulement après, je ferais une requête COUNT.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Tu peux aussi utiliser ta requête telle-quelle en tant que sous-requête, et faire un SUM() des décomptes en regroupant sur Type_Int.

    Tatayo.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    J'ai finalement suivi le conseil de Tatayo et ça marche . Merci beaucoup pour vos réponses.

    Merci pour votre aide.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Bonjour,


    j'ai globalement la même question.

    Je réalise une application de gestion de planning. Dans cette application je dois effectuer une vérification d'anomalie du planning.

    En l'occurence là j'ai besoin de savoir, pour toutes les personnes d'une équipe, le nombre de fois où elles apparaissent à un jour donné, dans la table planning, formation et absence.
    On considère donc qu'il y a une anomalie de planification quand une personne est présente plusieurs fois. En effet on ne peut pas être identifié absent et être affecté à un poste sur une ligne de production par exemple.
    J'ai donc 3 tables différentes : une table Planning(Travailler), une table Formation et une table Absence.
    Les tables formation et absence fonctionnent de la même manière, avec une date de début, et une date de fin.
    La table Planning quant à elle est composée d'une clé primaire composée d'une fonction (qui nous intéresse pas ici), d'une date et d'un poste : matin, après midi ou nuit.

    J'ai essayé de faire une sorte de sum de différents counts mais j'ai beaucoup de mal à organiser ma requê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
    24
    25
    26
     
     
    SELECT SUM(Total)
      FROM (
        SELECT Count(Travailler.NumPersonnel) as Total
        FROM Travailler, Personnel
        WHERE DatePlanning = #2014/01/01#
        AND Travailler.NumPersonnel = Personnel.NumPersonnel
        AND PostePlanning = 'Matin'
        AND Personnel.NumEquipe = 2
        GROUP BY Travailler.NumPersonnel
     
        UNION ALL(SELECT Count(Formation.NumPersonnel) as Total
                       FROM FORMATION, PERSONNEL
                       WHERE #2014/01/01# BETWEEN DateDebut AND DateFin
                       AND Personnel.NumPersonnel = Formation.NUmPersonnel
                       AND PERSONNEL.NumEquipe = 2
                       GROUP BY Formation.NumPersonnel)
     
        UNION ALL(SELECT Count(Absence.NumPersonnel) as Total
                       FROM ABSENCE, PERSONNEL
                       WHERE #2014/01/01# BETWEEN DateDebut AND DateFin
                       AND Personnel.NumPersonnel = Absence.NUmPersonnel
                       AND PERSONNEL.NumEquipe = 2
                       GROUP BY Absence.NumPersonnel))
    As Tot
    Cette requête me retourne :
    Expr1000
    3
    Alors que je souhaite récupérer pour chaque personne de l'équipe 2, le nombre de fois qu'ils sont présents.

    Soit quelque chose comme ça :
    Si il y avait 9 personnes dans l'équipe 2, on aurait un affichage comme celui ci :
    id total
    1 1
    2 1
    3 1
    4 1
    5 1
    6 2
    7 1
    8 1
    9 0

    Je galère un petit peu...

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

Discussions similaires

  1. requête dont je n'arrive pas à regrouper les résultats
    Par mdr_cedrick dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/02/2008, 11h05
  2. Regrouper les résultats de 3 requêtes en une seule
    Par getz85 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 28/01/2008, 18h39
  3. Réponses: 6
    Dernier message: 18/09/2007, 17h10
  4. Réponses: 2
    Dernier message: 29/11/2006, 11h52
  5. Réponses: 5
    Dernier message: 05/10/2004, 13h05

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