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 :

Problème requêtes regroupant en catégorie


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Problème requêtes regroupant en catégorie
    Bonjour,
    je vous explique mon problème :

    j'ai donc un table ou apparait des tickets, on y trouve notamment la catégorie du ticket.

    Je dois donc compter le nombre de ticket par catégorie, mais il me faudrait également regrouper certaines catégories en une seule.

    j'aurais par exemple :

    categorie | nb ticket
    cat1 | 3
    cat2 | 2
    cat3 | 4

    et il faudrait que je le regroupe comme ceci :

    categorie | nb ticket
    catTot | 9

    Si quelqu'un peut me donner une piste sur la méthode à utiliser en sql pour réaliser ceci ça m'aiderai beaucoup.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Regardez du côté de ROLLUP.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    le problème c'est que le ROLLUP va regrouper les catégories qui ont le même nom, moi je voudrais regrouper des catégories qui n'ont pas le même nom donc je peux pas utiliser un group by je pense.. ?

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Proposez un exemple et une requête !

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Si j'utilise cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      SELECT cat.name AS categorie,
             COUNT(glpi_tracking.ID) AS nbdossier,
             tr.status
        FROM glpi.glpi_tracking tr
             INNER JOIN glpi.glpi_dropdown_tracking_category cat
               ON tr.category = cat.ID
       WHERE tr.status = 'assign'
    GROUP BY cat.name
    ORDER BY cat.name ASC;
    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
    ASS - Assistance / logiciel		2
    AUT - Autres applicatifs (non listés)	2
    BUR - Assistance bureautique		3
    DXC - DxPharm				1
    eCap -					5
    eCap - Dev.				2
    eCap - Habilitation / accès		1
    eCap - SAB / Saisie Actes Bloc		1
    eCap - SPO / Saisie Planning Opératoire	2
    eCap - WEP / Cartographie		6
    eCap - Z - Bug applicatif		2
    HAB - Habilitations / Ouv. Comptes	6
    IFR - Infrastructure			1
    IMP - Imprimante locale / réseau	1
    IMP - Installation / Déplacement	1
    Je voudrais par exemple que les catégories "ASS-..", "BUR-.." et "DXC.." soit regroupé dans une catégorie "Maintenance" avec le nombre total de tickets..

    Ça vous semble plus clair ?

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    C'est un peu plus clair mais pas encore suffisant.
    Vous voulez ce résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ASS - Assistance / logiciel		2
    AUT - Autres applicatifs (non listés)	2
    BUR - Assistance bureautique		3
    DXC - DxPharm				1
    Maintenance				8
    Ou plutôt celui là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Maintenance	8	ASS - Assistance / logiciel		2
    Maintenance	8	AUT - Autres applicatifs (non listés)	2
    Maintenance	8	BUR - Assistance bureautique		3
    Maintenance	8	DXC - DxPharm				1

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Le 1er me suffit j'ai pas besoin du détail des sous catégories.

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Je n'ai pas de MySQL sous la main, mais je vous montre ce que donnerait une partie de votre exemple avec SQL Server.

    Il vous faudra une table de transcodification de vos catégories vers un groupe de catégorie (je le fais dans le from de ma requête).

    Données
    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
    declare @t table (cat_name   varchar(50));
     
    insert into @t (cat_name) values ('ASS - Assistance / logiciel');
    insert into @t (cat_name) values ('ASS - Assistance / logiciel');
    insert into @t (cat_name) values ('AUT - Autres applicatifs (non listés)');
    insert into @t (cat_name) values ('AUT - Autres applicatifs (non listés)');
    insert into @t (cat_name) values ('AUT - Autres applicatifs (non listés)');
    insert into @t (cat_name) values ('DXC - DxPharm');
    insert into @t (cat_name) values ('eCap -');
    insert into @t (cat_name) values ('eCap -');
    insert into @t (cat_name) values ('eCap -');
    insert into @t (cat_name) values ('eCap -');
    insert into @t (cat_name) values ('eCap -');
    insert into @t (cat_name) values ('eCap - Dev.');
    insert into @t (cat_name) values ('eCap - Dev.');
    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
      select coalesce(t.cat_name, r.cat_grp) as categorie,
             count(*) as nb_item
        from @t as t
             inner join 
             (select 'Maintenance' as cat_grp, 'ASS - Assistance / logiciel' as cat_name union all
              select 'Maintenance'           , 'AUT - Autres applicatifs (non listés)'   union all
              select 'Maintenance'           , 'DXC - DxPharm'                           union all
              select 'eCap - Total'          , 'eCap -'                                  union all
              select 'eCap - Total'          , 'eCap - Dev.'                             
              ) as r
                on r.cat_name = t.cat_name
    group by r.cat_grp,
             t.cat_name with rollup
      having grouping(r.cat_grp) * grouping(t.cat_name) = 0
    order by r.cat_grp desc,
             grouping(r.cat_grp) + grouping(t.cat_name) asc,
             t.cat_name asc;[/
    Résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    categorie                                          nb_item
    -------------------------------------------------- -----------
    ASS - Assistance / logiciel                        2
    AUT - Autres applicatifs (non listés)              3
    DXC - DxPharm                                      1
    Maintenance                                        6
    eCap -                                             5
    eCap - Dev.                                        2
    eCap - Total                                       7

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Ok! merci beaucoup pour la réponse !

    Pensez-vous qu'il est possible de créer une vue qui récupère l'id de chaque sous-catégorie et mettre en face de chaque id la catégorie ?

    id | catégorie
    12 | Bureautique
    14 | eCap
    15 | eCap

    Et utiliser ensuite cette vue dans la requête..

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Oui c'est probablement possible, mais la meilleure solution reste une table de référence, votre modèle de données devrait vous l'imposer.

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    J'ai cherché comment faire des tables de transcodification mais je n'y comprends pas grand chose.. désolé...

  12. #12
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    C'est une table tout-à-fait normale qui permet de décrire cette règle fonctionnelle :
    Je voudrais par exemple que les catégories "ASS-..", "BUR-.." et "DXC.." soit regroupé dans une catégorie "Maintenance" avec le nombre total de tickets..
    Donc par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE categorie_transco
    (
        cat_grp    varchar(50),
        cat_name   varchar(50)
    );
     
    insert into categorie_transco (cat_grp, cat_name)
    SELECT 'Maintenance' , 'ASS - Assistance / logiciel'           union ALL
    SELECT 'Maintenance' , 'AUT - Autres applicatifs (non listés)' union ALL
    SELECT 'Maintenance' , 'DXC - DxPharm'                         union ALL
    SELECT 'eCap - Total', 'eCap -'                                union ALL
    SELECT 'eCap - Total', 'eCap - Dev.';
     
    commit;
    C'est un exemple ultra-basique pour vous donner une idée, il faudra utiliser des id et des références en vrai.

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Ok oui en effet ça simplifierai bien les choses, mais je n'ai pas le droit de créer de nouvelles table malheureusement..

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2010
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    J'utilise en fait des union donc pour réaliser ma requête de la façon suivante :

    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
    (SELECT tr.category, LEFT(cat.name,4) AS categorie,
     
    'assign'  AS status_assign , count(case tr.STATUS when 'assign'  then tr.id end) AS 'en cours (attribué)',
    'waiting' AS status_waiting, count(case tr.STATUS when 'waiting' then tr.id end) AS nb_waiting,
    'plan'  AS status_plan , count(case tr.STATUS when 'plan'  then tr.id end) AS nb_plan
     
    FROM glpi.glpi_tracking tr
    INNER JOIN           glpi.glpi_dropdown_tracking_category cat
    ON (tr.category = cat.ID)
    WHERE (tr.STATUS IN ('assign', 'waiting','plan'))                              
    and cat.name!='eCap - Habilitation / accès'                              
     
    AND (LEFT(cat.name,4)='eCap' OR LEFT(cat.name,4)='DXC ')
     
    GROUP BY LEFT(cat.name,4)  )   
     
    UNION
     
    (SELECT tr.category, cat.name AS categorie,
     
    'assign'  AS status_assign , count(case tr.STATUS when 'assign'  then tr.id end) AS 'en cours (attribué)',
    'waiting' AS status_waiting, count(case tr.STATUS when 'waiting' then tr.id end) AS nb_waiting,
    'plan'  AS status_plan , count(case tr.STATUS when 'plan'  then tr.id end) AS nb_plan
     
    FROM glpi.glpi_tracking tr
    INNER JOIN           glpi.glpi_dropdown_tracking_category cat
    ON (tr.category = cat.ID)
    WHERE (tr.STATUS IN ('assign', 'waiting','plan'))                              
     
     
    AND (LEFT(cat.name,4)='MAT ' OR cat.name ='PC - Poste PC std / portable' OR cat.name ='IMP - Imprimante locale / réseau')
     
      )

    Ceci fonctionne correctement je voudrais juste en fait savoir comment je peux changer le nom de la catégorie.

    Dans ma colonne catégorie j'ai ceci :

    categorie
    DXC
    eCap
    PC - Poste PC std / portable

    Et je voudrais pouvoir change mon PC - Poste PC std / portable avec un nom que je choisis..

    est-ce possible ?

    Merci.

  15. #15
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Oui, mais je pense que les solutions sont déjà évoquées dans le reste du sujet.

    Soit vous faites un CASE WHEN..., soit une vue de transcodification, soit une table (j'ai compris que ce n'était pas possible dans votre cas).

    Pour la vue, c'est ce que j'ai fait un peu plus haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
             INNER JOIN 
             (SELECT 'Maintenance' AS cat_grp, 'ASS - Assistance / logiciel' AS cat_name union ALL
              SELECT 'Maintenance'           , 'AUT - Autres applicatifs (non listés)'   union ALL
              SELECT 'Maintenance'           , 'DXC - DxPharm'                           union ALL
              SELECT 'eCap - Total'          , 'eCap -'                                  union ALL
              SELECT 'eCap - Total'          , 'eCap - Dev.'                             
              ) AS r
    Pour le case, ça donnerait quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    case cat.name
      when 'ASS - Assistance / logiciel'           then 'Maintenance'
      when 'AUT - Autres applicatifs (non listés)' then 'Maintenance'
      ...
    end

Discussions similaires

  1. [AC-2013] Problème Requête avec Regroupement sur Champ Somme
    Par kesme dans le forum Access
    Réponses: 4
    Dernier message: 23/03/2015, 12h37
  2. [AC-2007] Problème date regroupement requête
    Par violaine dans le forum Access
    Réponses: 8
    Dernier message: 26/03/2013, 23h33
  3. Problème de regroupement dans requête
    Par nric7 dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 31/08/2009, 21h32
  4. Requête qui regroupe par catégorie
    Par Nessie37 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 30/11/2007, 18h45
  5. Problème de requête regroupement
    Par auriolbeach dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 09/07/2006, 18h23

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