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

Langage SQL Discussion :

creation d'une vue avec tri special


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Points : 34
    Points
    34
    Par défaut creation d'une vue avec tri special
    Bonjour,

    Je suis en train de me casser la tête pour créer une vue issue d'une table contenant des pointages. Les champs de la table qui m'interesse sont le numero de badge, la date et l'heure.
    Dans la vue, il me faut 3 champs : le numero de badge, la date + heure d'entrée et la date + heure de sortie. Bref, le premier pointage récuperer dans la table doit etre mis en DateEntree et le deuxieme en DateSortie. et je vois pas du tout comment faire ça.

    J'espère que ma demande est compréhensible...

    Merci d'avance

    Nico

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT P.NumBadge, MIN(P.DateHeurePointage) as DateHeureEntree, MAX(P.DateHeurePointage) as DateHeureSortie
    FROM T_Pointage P
    GROUP BY P.NumBadge

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Points : 34
    Points
    34
    Par défaut
    Merci,
    L'idée est bonne, mais pas parfaite, en effet, si il n'y a qu'un pointage (la personne est dans la batiment), il va mettre dateentree=datesortie. En plus, il y a 4 pointage par jour, puisqu'il y a une sortie - entrée a midi...
    donc on doit avoir :
    matin -> date entree
    midi -> date sortie
    apres-midi -> date entree
    soir -> date sortie
    et le champs doit etre vide si le poitage n'a pas ete fait.
    Il y a donc 2 lignes par jour par personne (au lieu de 4 dans la table initiale)

    Désolé de pas avoir été plus complet lors de mon premier post!

    Nico

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 103
    Points : 28 394
    Points
    28 394
    Par défaut
    Si ton SGBD prend en charge les fonctions de regroupement analytique, ceci devrait répondre à ton besoin :
    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  id_personne
        ,   date_pointe
        ,   MAX(CASE WHEN ordre_pointe = 1 THEN heure_pointe ELSE NULL END) AS entree_1
        ,   MAX(CASE WHEN ordre_pointe = 2 THEN heure_pointe ELSE NULL END) AS sortie_1
        ,   MAX(CASE WHEN ordre_pointe = 3 THEN heure_pointe ELSE NULL END) AS entree_2
        ,   MAX(CASE WHEN ordre_pointe = 4 THEN heure_pointe ELSE NULL END) AS sortie_2
    FROM
        (   SELECT  id_personne
                ,   date_pointe
                ,   heure_pointe
                ,   RANK()  OVER(PARTITION BY id_personne, date_pointe ORDER BY heure_pointe)   AS ordre_pointe
            FROM    pointage
        )   AS ordonne
    GROUP BY
            id_personne
        ,   date_pointe
    ;

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    La commande suivante foire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RANK()  OVER(PARTITION BY id_personne, date_pointe ORDER BY heure_pointe)   AS ordre_pointe
    Ma DB est une MaxDB 7.6.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    Y aurait-il une hame charitable (et compétente ) pour résoudre mon soucis??? la solution de al1_24 semblant prometeuse, mais n'est apparement pas compatible avec MaxDB...
    Merci d'avance, ça devient urgent!

    ou si quelqu'un a une idée pour faire ça en php, ça me va aussi! (faire un tableau avec l'entree1 et sortie1 sur la même ligne, puis entree2 et sortie2 sur la ligne suivante)

    Nicolas

Discussions similaires

  1. creation d'une vue avec des variables
    Par dark_botsay dans le forum Développement
    Réponses: 2
    Dernier message: 17/12/2010, 20h31
  2. Creer une vue avec gestion de date
    Par jf-nigou dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 01/06/2005, 16h36
  3. Créer une vue avec des requêtes UNION ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/04/2005, 12h37
  4. Creation d'une vue dynamique ?
    Par Simeans2004 dans le forum Administration
    Réponses: 5
    Dernier message: 01/07/2004, 15h25
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57

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