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 :

Grouper plusieurs lignes, en récupérant les champs différents


Sujet :

Requêtes MySQL

  1. #1
    Invité
    Invité(e)
    Par défaut Grouper plusieurs lignes, en récupérant les champs différents
    Bonsoir,

    Je suis en train de développer un module web de suivi d'horaires. J'ai une table comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE saisies_heureseffectuees (
      idHeuresEffectuees INT(11) UNSIGNED  NOT NULL AUTO_INCREMENT,  
      idPersonne       INT(11) UNSIGNED  NOT NULL,
      idActivite         INT(11) UNSIGNED  NOT NULL,
      noSemaine       TINYINT(2) UNSIGNED   NOT NULL,
      nbHeures         FLOAT(2) NOT NULL,
     
      CONSTRAINT pk_heureseffectuees    PRIMARY KEY(idHeuresEffectuees),
      CONSTRAINT fk_heureseffectueesEns FOREIGN KEY(idPersonne) REFERENCES p_personne (idPersonne),
      CONSTRAINT fk_heureseffectueesAct FOREIGN KEY(idActivite) REFERENCES ens_activite (idActivite)
    );
    J'ai gardé que les champs important. J'aimerais grouper les lignes selon idActivite et noSemaine, afin de récupérer une structure similaire à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    idPersonne      idActivite      noSemaine       nbHeures1       nbHeures2       nbHeures3
    1               1               42              1.5             3               3
    1               1               43              3               9               5
    2               2               42              1.5             NULL            3
    3               1               20              1.5             4               1
    Ici, on a 4 lignes, qui serait tiré en réalité de 11 lignes dans la table (une entrée peut ne pas être entrée, par exemple nbHeures2 sur la 3eme ligne). Les colonnes nbHeures1, nbHeures2 et nbHeures3 serait en réalité déterminé par le "idTypeActivité" : nbHeures1 = activite dont l'id est 1 et de même pour nbheures2 et nbHeures3

    J'ai jamais vu de requetes de ce type, mais je préfère demander en dernier recours.. J'espère avoir été clair cependant.

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    il faut combiner un group by avec une structure case ..when

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select col_1, col_2,
    sum(case when ma_cond = 1 then ma_valeur else 0 end), 
    sum(case when ma_cond = 2 then ma_valeur else 0 end)
    from ma_table
    group by col_1, col_2

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    J'ai du mal à comprendre.
    Les colonnes nbHeures1, nbHeures2 et nbHeures3 serait en réalité déterminé par le "idTypeActivité" : nbHeures1 = activite dont l'id est 1 et de même pour nbheures2 et nbHeures3
    Si tu veux dire que la colonne résultat nbheures1 est le nombre d'heures effectuées sur l'activité 1 et nbheures2 le nombre d'heures effectuées sur l'activité 2, comment se fait-il que dans ton tableau de résultat exemple, la personne 1 qui n'a travaillé que sur l'activité 1 ait des nombres dna sles colonnes nbheures2 et 3 et que la personne 2 ayant travaillé sur l'activité 2 ait des nombres sur nbheures1 et 3 mais justement pas sur nbheures2 ?

    Ton tableau de résultat ressemble fortement à de la cosmétique et ce n'est pas le boulot du SGBD.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Après réflexion, vous avez totalement raison CinePhil : l'affichage que je souhaites obtenir est plus de l'affichage, et obtenir ceci a la sortie du SGBD est plus se compliquer la vie qu'autre chose. La méthode des CASE WHEN ne donne pas ce que je souhaites, et trier tout ça après, c'est même plus la peine d'y penser Je vais donc passer par l'applicatif pour le regroupement

    Moi qui voulait utiliser le SGBD au maximum pour une fois Merci pour vos lanternes

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

Discussions similaires

  1. Fusionner plusieurs tables avec nombre de champs différents
    Par poussinvert dans le forum Requêtes
    Réponses: 7
    Dernier message: 31/07/2012, 08h56
  2. [AC-2003] De plusieurs lignes en un seul champ en SQL ?
    Par marot_r dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 29/05/2009, 18h57
  3. Ligne où tous les champs sont à nulles
    Par miketidy dans le forum SQL*Loader
    Réponses: 1
    Dernier message: 09/02/2009, 11h42
  4. "concaténer" plusieurs lignes dans un seul champ
    Par djobert dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/12/2008, 18h00
  5. Réponses: 2
    Dernier message: 21/08/2008, 12h46

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