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 :

Combiner plusieurs select


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 83
    Points : 53
    Points
    53
    Par défaut Combiner plusieurs select
    Bonjour

    J'ai une DB comptant sur chaque ligne les informations du temps travaillé de chaque employé sur un projet / équipement. Je veux faire un résumé pour 1 employé en particulier, mais en affichant les informations des dates une à côté de l'autre (comme dans un calendrier d'une semaine.


    ma table est comme ceci

    no_inc | employer_id | date | projet | équipement | heure travaillé

    1 | 54 | 2016-05-10 | 2139 | 003 | 01:00:00
    2 | 54 |2016-05-24 | 2139 | 005 | 00:30:00
    3 | 54 |2016-05-08 | 2217 | 001| 00:30:00
    4 | 54 |2016-05-10 | 2139 | vide | 02:00:00
    5 | 54 |2016-05-11 | 2139 | vide | 01:00:10
    6 | 54 |2016-05-09 | 2139 | 003 | 01:11:11
    8 | 54 |2016-05-25 | 100 | vide | 01:30:00
    9 | 54 |2016-05-26 | 100 | vide | 01:45:00


    Pour un employé, je sais comment avoir le résumé pour chaque date, mais j'aimerais pouvoir faire le tableau résumé pour une semaine. Attention, il peut arriver qu'il ait des journée sans heure. Au moment de lancer ma requête, je connais les dates vs journée de la semaine à traiter.

    J'ai essayé avec des UNION et JOIN mais sans obtenir le bon résultat. Mon meilleur essai est le code suivant, mais j’obtiens par exemple, le projet 2139 + équipement 003 sur 2 lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT EMPLOYE_ID,  PROJET, EQUIP,TEMPS as '2016-05-08' ,null as '2016-05-09 ',null as '2016-05-10 '  FROM oem.fdt_temps where employe_id = 54 and datee = '2016-05-08' 
     
    union 
     
     
     SELECT EMPLOYE_ID, PROJET, EQUIP,null,TEMPS as temp_c ,null as temp_c FROM oem.fdt_temps where employe_id = 54 and datee = '2016-05-09 '
     
    union 
     
     SELECT EMPLOYE_ID, PROJET, EQUIP,null,null,TEMPS as '2016-05-10 '  FROM oem.fdt_temps where employe_id = 54 and datee = '2016-05-10 '


    exemple du tableau que je veux faire

    projet | équipement | 2016-05-08 |2016-05-09 |2016-05-10 | 2016-05-11 | 2016-05-12 | 2016-05-13 | 2016-05-14

    2139 | 003 | | 01:11:11 | 1:00:00 |
    2217 | 001 | 00:30:00| | |
    2139 | | | | 02:00:00 | 01:00:10



    Merci de votre aide précieuse

  2. #2
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    Je ne suis pas sûr qu'on puisse réaliser cela par SQL. C'est possible par l'applicatif qui sert d'interface.
    À confirmer par les sages.

    Pierre

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 378
    Points : 19 054
    Points
    19 054
    Par défaut
    Salut metaldan.

    Est-ce que cela peut vous convenir ?
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE IF NOT EXISTS `test`
    ( `no_inc`       integer  unsigned not null auto_increment primary key,
      `employer_id`  smallint unsigned not null,
      `date`         date              not null,
      `projet`       integer  unsigned not null,
      `equipement`   smallint unsigned     null,
      `heure`        time              not null
    ) engine=innoDB
      default charset=latin1 collate=latin1_general_ci
      row_format=compressed
    --------------
     
    --------------
    insert into `test` (`employer_id`,`date`,`projet`,`equipement`,`heure`) values
      (54, '2016-05-10', 2139,  003, '01:00:00'),
      (54, '2016-05-24', 2139,  005, '00:30:00'),
      (54, '2016-05-08', 2217,  001, '00:30:00'),
      (54, '2016-05-10', 2139, null, '02:00:00'),
      (54, '2016-05-11', 2139, null, '01:00:10'),
      (54, '2016-05-09', 2139,  003, '01:11:11'),
      (54, '2016-05-25',  100, null, '01:30:00'),
      (54, '2016-05-26',  100, null, '01:45:00')
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +--------+-------------+------------+--------+------------+----------+
    | no_inc | employer_id | date       | projet | equipement | heure    |
    +--------+-------------+------------+--------+------------+----------+
    |      1 |          54 | 2016-05-10 |   2139 |          3 | 01:00:00 |
    |      2 |          54 | 2016-05-24 |   2139 |          5 | 00:30:00 |
    |      3 |          54 | 2016-05-08 |   2217 |          1 | 00:30:00 |
    |      4 |          54 | 2016-05-10 |   2139 |       NULL | 02:00:00 |
    |      5 |          54 | 2016-05-11 |   2139 |       NULL | 01:00:10 |
    |      6 |          54 | 2016-05-09 |   2139 |          3 | 01:11:11 |
    |      7 |          54 | 2016-05-25 |    100 |       NULL | 01:30:00 |
    |      8 |          54 | 2016-05-26 |    100 |       NULL | 01:45:00 |
    +--------+-------------+------------+--------+------------+----------+
    --------------
    select semaine, projet, equipement,
           max(lundi)    as lundi,
           max(mardi)    as mardi,
           max(mercredi) as mercredi,
           max(jeudi)    as jeudi,
           max(vendredi) as vendredi,
           max(samedi)   as samedi,
           max(dimanche) as dimanche
    from (
     
        select date_format(date, '%Y-%v') as semaine, projet, equipement,
               case weekday(date) when 0 then cast(heure as char) else '' end as lundi,
               case weekday(date) when 1 then cast(heure as char) else '' end as mardi,
               case weekday(date) when 2 then cast(heure as char) else '' end as mercredi,
               case weekday(date) when 3 then cast(heure as char) else '' end as jeudi,
               case weekday(date) when 4 then cast(heure as char) else '' end as vendredi,
               case weekday(date) when 5 then cast(heure as char) else '' end as samedi,
               case weekday(date) when 6 then cast(heure as char) else '' end as dimanche
        from test
     
    ) as x
    group by semaine, projet, equipement
    --------------
     
    +---------+--------+------------+----------+----------+----------+----------+----------+--------+----------+
    | semaine | projet | equipement | lundi    | mardi    | mercredi | jeudi    | vendredi | samedi | dimanche |
    +---------+--------+------------+----------+----------+----------+----------+----------+--------+----------+
    | 2016-18 |   2217 |          1 |          |          |          |          |          |        | 00:30:00 |
    | 2016-19 |   2139 |       NULL |          | 02:00:00 | 01:00:10 |          |          |        |          |
    | 2016-19 |   2139 |          3 | 01:11:11 | 01:00:00 |          |          |          |        |          |
    | 2016-21 |    100 |       NULL |          |          | 01:30:00 | 01:45:00 |          |        |          |
    | 2016-21 |   2139 |          5 |          | 00:30:00 |          |          |          |        |          |
    +---------+--------+------------+----------+----------+----------+----------+----------+--------+----------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 83
    Points : 53
    Points
    53
    Par défaut super aide
    Un très gros merci Artemus24.

    Ce n'est pas mon besoin à 100% , mais avec les CASE que tu utilise, ca m'aide énormément.

    Je vais prendre ton code et le modifier un peu pour mes besoins.


    Je vois tout de suite tout plein de situations ou je voulait avoir ce genre de requête sans savoir comment faire.


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

Discussions similaires

  1. Evenement Jlist plusieurs selection
    Par Blast dans le forum Composants
    Réponses: 1
    Dernier message: 16/03/2006, 17h44
  2. Combiner un Select et un Update avec une close Union ?
    Par Cygnus Saint dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/03/2006, 18h48
  3. plusieurs selections selon sur colonne different critere
    Par richton95 dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/01/2006, 17h25
  4. Plusieurs SELECT dans l'ouverture d'une connection
    Par pmboutteau dans le forum ASP
    Réponses: 6
    Dernier message: 01/04/2005, 11h09
  5. Combiner plusieurs textures avec couches alpha
    Par TibobiT dans le forum OpenGL
    Réponses: 2
    Dernier message: 01/05/2004, 15h20

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