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

SQL Firebird Discussion :

conseil sur requete


Sujet :

SQL Firebird

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    839
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 839
    Points : 262
    Points
    262
    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 éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    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 retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    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ù ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    839
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 839
    Points : 262
    Points
    262
    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