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

Requêtes MySQL Discussion :

Renvoyer la valeur 0 avec COUNT


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Par défaut Renvoyer la valeur 0 avec COUNT
    Bonjour à tous !

    J'ai un souci avec la fonction COUNT, peut-être saurez vous m'aider:

    En résumé, j'utilise un outil de gestion de parc (GLPI), j'ai donc une db contenant toutes les demandes d'intervention des users. Ces interventions sont classées par catégories (installation, dépannage etc). Il me faudrait le nombre d'interventions par catégorie. Simplement, il faudrait que le COUNT me renvoie 0 lorsqu'une catégorie ne contient aucune intervention. Là ça ne renvoie rien, ce qui décale tout d'une ligne lorsque je veux extraire les résultats de la requête ds un tableau excel. Voilà un exemple de requete:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "SELECT glpi_tracking_0.category, COUNT(*)
    FROM glpi.glpi_tracking glpi_tracking_0
    WHERE (glpi_tracking_0.date>={ts '" & Format$(ActiveSheet.date1.Value, "YYYY-MM-DD \0\0\:\0\0\:\0\0") & "'} And glpi_tracking_0.date<{ts '" & Format$(ActiveSheet.date2.Value, "YYYY-MM-DD \0\0\:\0\0\:\0\0") & "'}) 
    GROUP BY glpi_tracking_0.category")
    Si qqun a la solution à mon problème ce serait très sympa de m'en faire part !

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Comme une seule table est utilisée dans la requête, je suppose que celle-ci ne contient que les catégories qui ont eu au moins une intervention.

    Pour avoir toutes les catégories, il faut faire une jointure externe gauche depuis la table des catégories vers la table de tracking. À vous de voir quel est cette table manquante mais ça devrait donner un truc de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT c.nom_category, COUNT(g.identifiant_intervention) AS nb_interventions
    FROM glpi.glpi_category c
    LEFT OUTER JOIN glpi.glpi_tracking g ON g.category = c.identifiant_category
    WHERE g.`date` >= {ts '" & Format$(ActiveSheet.date1.Value, "YYYY-MM-DD \0\0\:\0\0\:\0\0") & "'} 
        AND g.`date` < {ts '" & Format$(ActiveSheet.date2.Value, "YYYY-MM-DD \0\0\:\0\0\:\0\0") & "'}
    ) 
    GROUP BY c.nom_category
    Au passage :
    1) j'ai remplacé l'alias à rallonge par un alias court plus pratique.
    2) j'ai entouré la colonne 'date' par des apostrophes inversées car c'est un mot du langage SQL et cette colonne est donc mal nommée dans glpi.
    3) Je trouve bizarre la syntaxe employée dans le WHERE : {ts...
    C'est quel langage ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Par défaut
    C'est du VBA. Moi aussi la syntaxe me parait assez spéciale, mais c'est ainsi que la requête a été générée par Microsoft Query (outil qui te permet dans Excel de créer des requêtes simplement). Donc lorsque j'ai modifié ma requête pour les formats de date etc j'ai laissé les "ts" sans trop chercher.

    J'ai une erreur de syntaxe pour l'instant, je dois y aller je regarde ça de plus près tout à l'heure.

    Merci!

    La requête actuelle pour info:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    "SELECT c.name, COUNT(g.ID) AS nb_interventions 
    FROM glpi.glpi_dropdown_tracking_category c 
    LEFT OUTER JOIN glpi.glpi_tracking g ON g.category = c.ID
    WHERE g.`date` >= {ts '" & Format$(ActiveSheet.date1.Value, "YYYY-MM-DD \0\0\:\0\0\:\0\0") & "'}
    AND g.`date` < {ts '" & Format$(ActiveSheet.date2.Value, "YYYY-MM-DD \0\0\:\0\0\:\0\0") & "'})
    GROUP BY c.name")

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT c.name, Count(g.ID) AS 'nb_interventions'
    FROM {oj glpi.glpi_dropdown_tracking_category c 
    LEFT OUTER JOIN glpi.glpi_tracking g ON c.ID = g.category}
    WHERE (g.date>={ts '2010-08-01 00:00:00'} And g.date<{ts '2010-08-05 00:00:00'})
    GROUP BY c.name
    Cette requête passe, c'est celle que vous m'avez proposée, la seule différence est que j'ai saisi les dates en dur pour tester (au lieu de faire référence aux objets date1 et date2).

    Par contre, le résultat ne me renvoie pas toutes les catégories, mais uniquement celles qui ont eu au moins une intervention sur la période saisie.. donc ça ne règle pas mon problème

    Une idée?

    Merci pour l'aide en tout cas

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par dth.0 Voir le message
    Par contre, le résultat ne me renvoie pas toutes les catégories, mais uniquement celles qui ont eu au moins une intervention sur la période saisie.. donc ça ne règle pas mon problème
    Oui, normal ! La restriction (WHERE) porte sur les colonnes de la table à droite de la jointure donc ça revient à faire un INNER JOIN.

    Il faut déplacer le WHERE dans la condition de jointure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT c.name, Count(g.ID) AS 'nb_interventions'
    FROM {oj glpi.glpi_dropdown_tracking_category c 
    LEFT OUTER JOIN glpi.glpi_tracking g ON c.ID = g.category}
        AND (g.date>={ts '2010-08-01 00:00:00'} AND g.date<{ts '2010-08-05 00:00:00'})
    GROUP BY c.name
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Par défaut
    bonjour,

    au hasard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT IF(IFNULL(count(monChamp) , 0) = 0, 0, count(monChamp)) as toto,
    Un truc dans le genre

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

Discussions similaires

  1. Renvoyer la valeur du lien cliqué avec JavaScript
    Par mesken dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/04/2012, 02h30
  2. Réponses: 3
    Dernier message: 13/11/2008, 10h21
  3. Comment renvoyer une valeur avec RefEdit
    Par skorpio dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 17/07/2007, 16h42
  4. Problème avec COUNT() et la récupération des valeurs..
    Par Marshall_Mathers dans le forum Outils
    Réponses: 4
    Dernier message: 25/06/2007, 13h26
  5. Pas d'affichage des valeurs nulles avec un COUNT
    Par phoenixz22 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 30/05/2007, 19h39

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