p
u
b
l
i
c
i
t
é
publicité

Discussion: conseil sur requete

  1. #1
    Membre confirmé
    Inscrit en
    mai 2007
    Messages
    786
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : mai 2007
    Messages : 786
    Points : 212
    Points
    212

    Par défaut conseil sur requete

    bonjour,

    Soit la requete suivante qui me sort les heures travaillées par employé et par mois.

    Elle fonctionne bien mais le classement par mois me donne par exemple:
    1-2012
    10-2012
    -
    -
    6-2012
    9-2012
    les mois ne sont pas dans l'ordre ?

    est ce qu'il y a une astuce pour contourner ce problème ?

    (Je suis sous FB2.1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select coalesce(EMPLOYE.EMPRENOM || ' ',' ') || EMPLOYE.EMNOM as PATRO,
    extract(month from heures.ptdate)|| '-' || extract(year from heures.ptdate) as MOIS, sum(heures.pttime) as  TOTAL from HEURES
    join EMPLOYE on EMPLOYE.EMIDEMP=heures.ptidemp
    join CMDCLI on CMDCLI.COIDCDE=heures.ptidcde
    group by  MOIS, PATRO
    order by  MOIS
    merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    janvier 2009
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2009
    Messages : 479
    Points : 790
    Points
    790

    Par défaut

    Bonjour,

    Il est possible de traiter ton problème avec le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT coalesce(EMPLOYE.EMPRENOM || ' ',' ') || EMPLOYE.EMNOM AS PATRO,
      RIGHT('00' || extract(month FROM heures.ptdate)|| '-' || extract(year FROM heures.ptdate), 7) AS MOIS, 
      sum(heures.pttime) AS  TOTAL FROM HEURES
    JOIN EMPLOYE ON EMPLOYE.EMIDEMP=heures.ptidemp
    JOIN CMDCLI ON CMDCLI.COIDCDE=heures.ptidcde
    GROUP BY  MOIS, PATRO
    ORDER BY  MOIS
    Il faut mettre un zéro devant les mois 1 à 9 pour permettre un alignement. Ton tri se fait sur des caractères. C'est pour cette raison que 10 et placé avant 6. C'est mal expliqué, mais je pense que tu comprendras.

    Les ajouts sont en rouge et gras

    J'ai fait un test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    02-2012
    06-2012
    10-2012
    A+

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    6 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 257
    Points : 12 633
    Points
    12 633
    Billets dans le blog
    3

    Par défaut

    Bonjour,
    le fait que l'ordre ne soit pas 'Logique' est que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extract(month FROM heures.ptdate)|| '-' || extract(year FROM heures.ptdate) AS MOIS
    fourni un varchar donc le tri est alphanumérique et non numérique

    1° solution Inverser MM-AAAA en AAAA-MM , cependant il faudrait que MM soit avec des Zéros non significatifs , ce qui ne sera pas le cas sauf a utiliser LPAD(extract(Month FROM heures.ptdate),2,0)

    ce qui donnerai ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
    extract(Year FROM heures.ptdate)|| '-' || LPAD(extract(Month FROM heures.ptdate),2,0) AS MOIS,
    coalesce(EMPLOYE.EMPRENOM || ' ',' ') || EMPLOYE.EMNOM AS PATRO, sum(heures.pttime) AS  TOTAL 
    FROM HEURES
    JOIN EMPLOYE ON EMPLOYE.EMIDEMP=heures.ptidemp
    JOIN CMDCLI ON CMDCLI.COIDCDE=heures.ptidcde
    GROUP BY  1,2


    2° solution (la plus simple) Mois devient numérique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extract(Year FROM heures.ptdate)*100+extract(Month FROM heures.ptdate) AS NUMMOIS
    ce qui donnerai ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT extract(Year FROM heures.ptdate)*100+extract(Month FROM heures.ptdate) AS NUMMOIS,
    extract(month FROM heures.ptdate)|| '-' || extract(year FROM heures.ptdate) AS MOIS,
    coalesce(EMPLOYE.EMPRENOM || ' ',' ') || EMPLOYE.EMNOM AS PATRO, sum(heures.pttime) AS  TOTAL 
    FROM HEURES
    JOIN EMPLOYE ON EMPLOYE.EMIDEMP=heures.ptidemp
    JOIN CMDCLI ON CMDCLI.COIDCDE=heures.ptidcde
    GROUP BY  1,2,3
    le ORDER BY est inutile

    3° Solution (que je ne maitrise pas donc juste une piste) l'indication de
    d'un CHARSET d'un COLLATE , j'ai déjà lu cela quelque part, mais où ?
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  4. #4
    Membre confirmé
    Inscrit en
    mai 2007
    Messages
    786
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : mai 2007
    Messages : 786
    Points : 212
    Points
    212

    Par défaut réponse

    bonjour,

    Tout fonctionne parfaitement.
    J'ai adapté la requete sur une extraction par semaine et ca fonctionne bien aussi.

    merci pour votre aide

    cordialement

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

Discussions similaires

  1. conseil sur requete
    Par durk dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/04/2009, 12h32
  2. idees sur requete a simplifier ???
    Par DaxTaz dans le forum MS SQL-Server
    Réponses: 2
    Dernier message: 05/07/2004, 09h42
  3. cherche conseil sur livre pour jbuilder
    Par med1 dans le forum JBuilder
    Réponses: 3
    Dernier message: 09/06/2004, 13h33
  4. [débutant] conseils sur contraintes et alter table
    Par maysa dans le forum MS SQL-Server
    Réponses: 10
    Dernier message: 26/05/2004, 09h03
  5. Recherche Livre / Conseils sur la conception de Base
    Par Yeuma dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 02/01/2004, 14h25

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