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 et SQL. Discussion :

Opération en colonne dans une requête


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Points : 59
    Points
    59
    Par défaut Opération en colonne dans une requête
    Bonjour,

    Voici la situation :
    J'ai une table contenant 3 champs :

    Nom | Activite| Heuredebut

    Dupont | nettoyage | 8,5h
    Dupont | findejournee | 16,5h
    Robert | peinture | 9,5h
    Robert | vissage | 13h
    Robert | findejournee | 17,5h
    Bernard | nettoyage | 8,5h
    Bernard | findejournee | 16,5h

    Voilà comment lire le tableau :
    Robert -> Peinture de 9,5h à 13h
    Robert -> vissage de 13h à 17,5h

    Les heures sont en centièmes.
    J'aimerais donc sur une seule ligne avoir :

    Nom | Activite | heuredebut | heurefin
    Robert | peinture | 9,5h | 13h
    Robert | peinture | 13h | 17,5h

    J'ai essayer par l'intermediaire de plusieurs requêtes mais je n'arrive pas du tout à ce que je veux.
    1ere idée :Dans un champs soustraire au champs heuredebut de la 2eme ligne le champs heuredebut de la premère ligne
    2ème idée : Prendre la valeur de heuredebut de la 2eme ligne dans un champs heure fin situé sur ma premiere ligne"

    Si quelqu'un aurait une solution ou pourrait m'orienter vers une solution ?

    Cordialement,

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    Essayer, sauf erreur, avec la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT MT.Nom, MT.Activite, MT.Heuredebut, (SELECT TOP 1  heuredebut FROM
     MaTable WHERE nom=MT.nom AND 
    heuredebut>MT.heuredebut ORDER BY heuredebut) AS HeureFin
    FROM MaTable AS MT
    WHERE (((MT.Activite)<>"findejournee"))
    ORDER BY MT.Nom, MT.Heuredebut;
    Cordialement,

    Philippe

  3. #3
    Membre éclairé Avatar de ft035580
    Profil pro
    Inscrit en
    Août 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 689
    Points : 799
    Points
    799
    Par défaut
    Salut,

    Philben t'a donné une bonne idée auquelle je n'avais pas pensé.

    Je te propose tout de même la mienne (D'accord en 2 requêtes)

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT EmploiDuTemps.Nom, EmploiDuTemps.Activité, EmploiDuTemps.HeureDébut
    FROM EmploiDuTemps
    UNION SELECT EmploiDuTemps.Nom, EmploiDuTemps.Activité, EmploiDuTemps.HeureDébut
    FROM EmploiDuTemps;

    Rmq.:"EmploiDuTemps" est le nom de ta table.

    Nom de la requête:"EmploiDuTempsQRY"

    Puis

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TRANSFORM First(EmploiDuTempsQRY.Activité) AS PremierDeActivité
    SELECT EmploiDuTempsQRY.Nom
    FROM EmploiDuTempsQRY
    GROUP BY EmploiDuTempsQRY.Nom
    PIVOT EmploiDuTempsQRY.HeureDébut;

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    re bonjour,

    je rajoute cette requête si le champ <heuredebut> est un champ texte car précédemment, j'ai considéré qu'il était un champ numérique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT MT.Nom, MT.Activite, MT.Heuredebut, (SELECT TOP 1 Heuredebut
     FROM MaTable2 WHERE nom=MT.nom AND 
    VAL(REPLACE([Heuredebut],",","."))>VAL(REPLACE(MT.Heuredebut,",","."))
     ORDER BY Val(Replace([Heuredebut],",","."))) AS HeureFin
    FROM MaTable2 AS MT
    WHERE (((MT.Activite)<>"findejournee"))
    ORDER BY MT.Nom, Val(Replace([Heuredebut],",","."));
    ft035580 qui n'est pas un flemmard comme moi a surement fait un système plus propre en 2 requêtes que ma requête un peu bidouille...

    Cordialement,

    Philippe

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Points : 59
    Points
    59
    Par défaut
    Merci à vous deux pour vos réponses. J'essaye tout sa et je vous tiens au courant. Juste pour infos il se peut que pour une seul et même personne à un jour donné, cette personne puissent occupé plus de 2 activité (4 ou 5 même) dans la même journée.

    Merci encore!!

    cordialement,

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Points : 59
    Points
    59
    Par défaut
    Merci à vous deux, vous venez de débloquer un problème que j'avais dans l'élaboration d'état donc le nombre de colonne est variable !! Est il possible de faire la somme par ligne ?

    On approche de la solution. Je pense avoir mal écrit mes idées. En fait il me faudrait comme résultat le suivant :

    Nom | heuredebut |heurefin
    Dupont | vissage | 9h00 | 11h00
    Dupont | nettoyage | 11h00 | 13h00
    Dupont | rangement | 13h00 | 16h00
    Dupont | fin de journée | 16h00 | " "

    Où le 9h est l'heure de début qui lui est rattaché au nom.Donc pas de problème. Cependant le 11h00 vient du champs heure de début de la ligne suivante (toujours pour le même nom).

    Merci pour vos réponses qui débloqueront d'autres personnes également !!

    Cordialement,

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Points : 59
    Points
    59
    Par défaut
    Rebonjour,

    J'ai trouvé la solution pour faire la somme en ligne !! :o)

    Cependant il me reste toujours à faire remonter les heures de début d'une ligne L au champs heure de fin de la ligne L-1

    Cordialement,

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    les spécifications du problème ont changé que je résume a priori comme ça :
    1) Les heures sont saisies sous la forme hhHmm
    Exemples :9H00, 08h, 13H00, 15h30, 16H45)
    Le champ HeureDebut est surement un champ de type de texte
    2) La requête doit faire apparaître une ligne supplémentaire pour la fin de journée et Heure de fin doit contenir un espace si NULL
    Exemple : Dupont | fin de journée | 16h00 | " "

    Voici ma table de test (MaTable3) :
    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
     
    Nom      Activite          HeureDebut
    Bernard  findejournee      16H30
    Bernard  nettoyage         08H30
    Dupont   rangement         13H00
    Dupont   nettoyage         11H00
    Dupont   fin de journée    16H30
    Robert   pause             09h
    Robert   vissage           13H
    Robert   findejournee      17H30
    Robert   peinture          8h00
    Toto     Dodo              22H00
    Toto     Forum DVP !       19H30
    Toto     Boulot            2H15
    Toto     Metro             00H45
    La requête, dans ce cas, devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT MT.Nom, MT.Activite, MT.HeureDebut, NZ((SELECT TOP 1 
    HeureDebut FROM MaTable3 WHERE nom=MT.nom AND 
    VAL(REPLACE([HeureDebut],"H","."))>VAL(REPLACE(MT.HeureDebut,"H",".")) 
    ORDER BY Val(Replace([HeureDebut],"H",".")))," ") AS HeureFin
    FROM MaTable3 AS MT
    ORDER BY MT.Nom, Val(Replace([Heuredebut],"H","."));
    pour obtenir :
    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
     
    Nom                Activite           HeureDebut          HeureFin
    Bernard            nettoyage          08H30               16H30
    Bernard            findejournee       16H30  
    Dupont             nettoyage          11H00               13H00
    Dupont             rangement          13H00               16H30
    Dupont             fin de journée     16H30  
    Robert             peinture           8h00                09h
    Robert             pause              09h                 13H
    Robert             vissage            13H                 17H30
    Robert             findejournee       17H30  
    Toto               Metro              00H45               2H15
    Toto               Boulot             2H15                19H30
    Toto               Forum DVP          19H30               22H00
    Toto               Dodo               22H00
    En espérant avoir répondu à votre attente !

    Cordialement,

    Philippe

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    re bonjour,

    j'ai eu une lumière (enfin je pense ) !, vous saisissez les heures en centièmes dans un champ numérique mais vous souhaitez qu'elles apparaissent sous forme hhHmm dans l'état.

    Voilà une requête renvoyant les heures de début et de fin sous forme de centième (pour vos calcul de somme) et sous forme hhHmm (pour affichage) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT MT.Nom, MT.Activite, MT.HeureDebut, (SELECT MIN(HeureDebut)
     FROM MaTable WHERE nom=MT.nom AND HeureDebut>MT.HeureDebut) 
    AS HeureFin, Format((Int([HeureDebut])+(([HeureDebut]-
    Int([HeureDebut]))*60/100))*100,"00\h00") AS [Début(hhHmm)], 
    Format((Int([HeureFin])+(([HeureFin]-Int([HeureFin]))*60/100))*100,
    "00\h00") AS [Fin(hhHmm)]
    FROM MaTable AS MT
    ORDER BY MT.Nom, MT.HeureDebut;
    En espérant que...

    Philippe

  10. #10
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Points : 59
    Points
    59
    Par défaut
    Bonjour,

    Merci de votre aide. Les heures sont au final saisie en format heure "12:00". Pour votre dernière requête j'ai toujours un vide dans la colonne heure de fin. Elle ne me renvoit pas l'heure de début de la ligne suivante pour qui le nom est le même.

    A mon avis il doit y avoir quelque chos qui ne va pas à ce niveau :
    VAL(REPLACE([HeureDébut],"H","."))>VAL(REPLACE(emploidutemps.HeureDébut,"H","."))
    ORDER BY Val(Replace([HeureDébut],"H",".")))," ") AS HeureFin

    A quel moment dans ce code on dit de prendre la valeur en heure début de la ligne L et de la placer en heure de fin de la ligne L-1 ?

    Cordialement,

    NB:Je joins la base d'exemple ce qui permettra de mieux voir d'où vient le problème.
    Fichiers attachés Fichiers attachés

  11. #11
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    Ce qui ne fonctionnait pas est que vous avez enlevé l'alias (nommé ici EDT) de la table de la requête principale.

    J'ai mis dans votre base 2 requêtes, une qui renvoie aussi les champs formatés pour affichage.

    Cordialement,

    Philippe

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Points : 59
    Points
    59
    Par défaut
    C'est exactement ce que je voulais ! Merci beaucoup du temps passé sur mon problème !
    Je le met à quel nom le chèque ??

    Cordialement,

  13. #13
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    Un tag RESOLU suffira pour cette fois !

    Cordialement,

    Philippe

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

Discussions similaires

  1. Récupération du nom de colonne dans une requête
    Par Devlop++ dans le forum Access
    Réponses: 4
    Dernier message: 27/07/2007, 16h48
  2. Problème de visibilité de table/colonne dans une requête
    Par MicaelFelix dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 13/07/2007, 16h41
  3. Réponses: 2
    Dernier message: 23/04/2007, 00h10
  4. [Requete]Faire disparaître une colonne dans une requête
    Par emilie31 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 04/04/2007, 11h10
  5. fusion de 2 colonnes dans une requête select?
    Par epeichette dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/11/2005, 23h05

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