Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/01/2012, 20h20   #1
Invité de passage
 
Maxime Lorant
Inscription : février 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Maxime Lorant

Informations forums :
Inscription : février 2011
Messages : 6
Points : 3
Points : 3
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 :
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 :
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
ssx3max est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 20h29   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
bonjour,

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

Par exemple :
Code :
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
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/01/2012, 14h30   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
J'ai du mal à comprendre.
Citation:
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 22h52   #4
Invité de passage
 
Maxime Lorant
Inscription : février 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Maxime Lorant

Informations forums :
Inscription : février 2011
Messages : 6
Points : 3
Points : 3
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
ssx3max est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h52.


 
 
 
 
Partenaires

Hébergement Web