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 :

Question sur l'Utilisation des ORDER BY


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Par défaut Question sur l'Utilisation des ORDER BY
    Bonjour,

    Je souhaiterais trier une liste d'agents en fonction de leur priorité définit par le champ 'p.indprefagtprt'. Seulement, certains agents peuvent ne pas avoir de priorité et j'aimerais que ceux qui n'en n'on pas s'affichent en fin de liste. Actuellement, seul ceux qui ont une priorité s'affichent. Comment puis-je modifier ma requête pour afficher les agents ne possèdant aucune priorité ?

    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT a.idagt AS id, a.nomagt AS nom, a.prenomagt AS prenom, a.societeagt AS societe, a.telagt AS tel
    FROM agents a, disponibilites_agent da, disponibilites d, priorites p
    WHERE a.idagt = da.idagtagdp
    AND da.iddspagdp = d.iddsp
    AND d.idsectmaindsp = 5
    AND '2009-10-13 11:05:00' BETWEEN TIMESTAMP(d.dtdebdsp, d.hrdebdsp) AND TIMESTAMP(d.dtfindsp, d.hrfindsp)
    AND p.idagtprt = a.idagt
    AND p.idsectmainprt = 5
    ORDER BY p.indprefagtprt;

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Bonjour,

    Il faut déjà selectionner la colonne sur laquelle doit porter le tri.
    Ensuite, faire une jointure externe entre agent et priorites et mettre la condition p.idsectmainprt = 5 dans les conditions de jointures pour conserver les agents sans priorites.
    Et au passage, utiliser la syntaxe de jointure normalisée.
    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
     
    SELECT 
           a.idagt AS id, 
           a.nomagt AS nom, 
           a.prenomagt AS prenom, 
           a.societeagt AS societe, 
           a.telagt AS tel,
           p.indprefagtprt
    FROM agents a
    INNER JOIN disponibilites_agent da ON a.idagt = da.idagtagdp
    INNER JOIN disponibilites d ON da.iddspagdp = d.iddsp
    LEFT OUTER JOIN priorites p ON p.idagtprt = a.idagt AND p.idsectmainprt = 5
    WHERE d.idsectmaindsp = 5
    AND '2009-10-13 11:05:00' BETWEEN TIMESTAMP(d.dtdebdsp, d.hrdebdsp) AND TIMESTAMP(d.dtfindsp, d.hrfindsp)
    ORDER BY p.indprefagtprt

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Par défaut
    Merci pour t'a réponse.
    J'ai testé ta requête qui fonctionne pratiquement comme je voudrais sauf que les agents qui ne possèdent pas de priorité sont classés en tête de liste et je voudrais qu'ils apparaissent en fin de liste. Comment puis-je modifier la requête ?

    Merci de vos réponses

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    e voudrais qu'ils apparaissent en fin de liste. Comment puis-je modifier la requête ?
    Il te suffit pour cela de modifier la clause order by en utilisant la fonction COALESCE qui renvoie le deuxieme paramètre si le premier est null.
    Si indprefagtprt est alphabétique tu peux mettre quelque chose comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY COALESCE(p.indprefagtprt,'ZZ')
    ou si c'est un entier qui ne dépasse pas 999
    cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY COALESCE(p.indprefagtprt,999)
    A toi de voir, je ne connais pas le type de donnée de ta colonne, ni sa valeur maximale.
    Cordialement
    Soazig

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Par défaut
    Merci à vous, c'est impeccable !!!

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 136
    Par défaut
    Sans avoir à te poser la question du type et de la valeur maximale de ton identifiant de tri, tu peux faire ton tri de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ORDER BY CASE WHEN p.indprefagtprt IS NULL 2 ELSE 1 END
        ,    p.indprefagtprt
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Certains sgbd simplifient la chose en respectant la norme : NULL FIRST et NULL LAST

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

Discussions similaires

  1. [Smarty] Question sur l'utilisation des générateur de template
    Par fongus dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 24/09/2007, 21h36
  2. Question sur l'utilisation des evenements
    Par Seth77 dans le forum C#
    Réponses: 2
    Dernier message: 12/06/2007, 23h27
  3. Question sur l'utilisation des onglets
    Par diden138 dans le forum Delphi
    Réponses: 20
    Dernier message: 16/11/2006, 19h48
  4. Débutant: Question sur l'utilisation des structures
    Par pdgnr dans le forum C++Builder
    Réponses: 5
    Dernier message: 26/10/2006, 13h03
  5. Réponses: 3
    Dernier message: 21/10/2006, 16h03

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