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 :

Requête Select Top et Order by multi-critères en même temps.


Sujet :

Requêtes et SQL.

  1. #1
    Courgette17
    Invité(e)
    Par défaut Requête Select Top et Order by multi-critères en même temps.
    J'ai une requête comme ça qui marche:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM produit ORDER BY nomproduit , descproduit

    Et maintenant je veux faire quelque chose de plus compliqué en Microsoft Access pour prendre par exemple l'enregistrement allant de 50 à 100, ce qui me donne ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM (SELECT TOP 50 * FROM ( SELECT TOP 100 * FROM produit ORDER BY nomproduit, descproduit) ORDER BY nomproduit DESC, descproduit DESC) ORDER BY nomproduit, descproduit
    Mais cette ligne ne fonctionne pas comme je veux. Elle ne me fait ni le ORDER BY nomproduit ni aucun tri. J'ai beau enlever les descproduit de la requete, ou bien mettre des DESC ou en supprimer un peu partout pour essayer cela ne change rien.
    Comment dois-je m'y prendre?

    Merci d'avance
    Dernière modification par Courgette17 ; 28/02/2008 à 13h22.

  2. #2
    J1
    J1 est déconnecté
    Membre expérimenté Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Par défaut
    Bonjour,

    ta requête me paraît bonne.
    Je l'ai testée sous Access 2002 avec le jeu d'enregistrements suivant pour obtenir les enregistrements 6 à 10 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    table produit
    ---------------------------
    nomproduit / descproduit
    a / 1
    b / 1
    c / 1
    d / 1
    e / 1
    e / 2
    g / 1
    h / 1
    i / 1
    j / 1
    j / 2
    Et j'obtiens le résultat suivant, qui me semble correct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    nomproduit / descproduit
    e / 2
    g / 1
    h / 1
    i / 1
    j / 1
    Ci-dessous la requête exécutée (identique à la tienne, mais pour les enregistrements 6 à 10) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT * 
    FROM (
    	SELECT TOP 5 * 
    	FROM ( 
    		SELECT TOP 10 * 
    		FROM produit 
    		ORDER BY nomproduit, descproduit) 
    	ORDER BY nomproduit DESC, descproduit DESC) 
    ORDER BY nomproduit, descproduit
    Es-tu sûr que la requête ne fonctionne pas chez toi ?

    NB : au fait, a priori, ta requête renvoie les enregistrements 51 à 100 (en admettant que la clef de tri {nomproduit,descproduit} empêche bien les ex-aequo).

  3. #3
    Courgette17
    Invité(e)
    Par défaut
    En fait, il ne me tri rien du tout. J'ai des objets commençant par la lettre O qui finisse avant le A, et puis après il y a encore un O. Je comprends pas d'où il prend ce tri, ce n'est ni DESC, ni ASC ( ça aurait été trop simple sinon...).

    Je fais quoi pour prendre de 50 à 100?

    J'utilise cette requête dans une page ASP.NET en VB.NET mais j'ai pensé que c'était le forum le plus approprié pour poser cette question.

    Qu'est-ce que tu veux dire par "(en admettant que la clef de tri {nomproduit,descproduit} empêche bien les ex-aequo)." ??

  4. #4
    J1
    J1 est déconnecté
    Membre expérimenté Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Par défaut
    Citation Envoyé par MadMarc52 Voir le message
    En fait, il ne me tri rien du tout. J'ai des objets commençant par la lettre O qui finisse avant le A, et puis après il y a encore un O. Je comprends pas d'où il prend ce tri, ce n'est ni DESC, ni ASC ( ça aurait été trop simple sinon...).
    Citation Envoyé par MadMarc52 Voir le message
    J'utilise cette requête dans une page ASP.NET en VB.NET
    As-tu essayé de lancer directement la requête dans Access ? Si oui, que se passe-t-il une fois le résultat affiché dans Access, si tu modifies l'ordre de tri avec les boutons "A->Z" et "Z->A" ?


    Citation Envoyé par MadMarc52 Voir le message
    Je fais quoi pour prendre de 50 à 100?
    Les enregistrements 50 à 100 représentent 51 enregistrements, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT * 
    FROM (
    	SELECT TOP 51 * 
    	FROM ( 
    		SELECT TOP 100 * 
    		FROM produit 
    		ORDER BY nomproduit, descproduit) 
    	ORDER BY nomproduit DESC, descproduit DESC) 
    ORDER BY nomproduit, descproduit

    Citation Envoyé par MadMarc52 Voir le message
    Qu'est-ce que tu veux dire par "(en admettant que la clef de tri {nomproduit,descproduit} empêche bien les ex-aequo)." ??
    Dans Access, si tu fais un...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT TOP 2 *
    FROM MaTable
    ORDER BY Champ1, Champ2
    ... sur la table...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    table MaTable
    Champ1 / Champ2
    A / 1
    B / 1
    B / 1
    C / 2
    ... tu vas obtenir...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Champ1 / Champ2
    A / 1
    B / 1
    B / 1
    ... car ta clef de tri {Champ1,Champ2} ne te permet pas de départager les 2 enregistrements B/1. Il faudrait dans ce cas ajouter un champ à la fin de ta clef de tri afin de les départager (la clef primaire de la table par exemple).
    A noter que ce comportement du mot-clef TOP est différent selon les SGBD (SQL Server 2000 par exemple ne te renverra que 2 enregistrements (A/1 et B/1), même si la clause ORDER BY ne permet pas de départager les 2 B/1).

  5. #5
    Courgette17
    Invité(e)
    Par défaut
    Merci beaucoup pour tes réponses.
    La requête dans Access fait strictement le même résultat que dans la page Web c'est à dire trier je ne sais comment. Pourtant j'ai regardé les autres champs et aucun ordre de tri ne me parait évident, même le champ de l'id du produit est en désordre.
    J'ai essayé en sélectionnant les colonnes nomproduit et descproduit en appuyant sur A-> Z et Z -> A mais rien n'y change, ça reste toujours dans le désordre. J'ai essayé en sélectionnant une seule colonne a la fois, même résultat.

    Seul le champ idproduit veut bien se trier par ordre croissant et décroissant.

    Je pense que ce qui pose problème c'est le fait que les champs nomproduit et descproduit soient en mémo. J'ai besoin d'un champ qui prenne autant de caractères, et j'ai aussi besoin qu'il y ait des doublons car plusieurs produits peuvent être de la même marque.
    Est-ce que je dois changer une des propriétés de ces champs?

    Et dire que quand je consulte la table normalement sans requête sous Access je peux voir le résultat que je souhaite en appuyant sur A -> Z avec les 2 colonnes sélectionnées...

  6. #6
    Courgette17
    Invité(e)
    Par défaut
    Apparemment c'était en effet le champ mémo avec lequel on ne peut avoir de tri.
    J'ai finalement opté pour un champ texte pour la marque et donc avec tri croissant et j'ai laissé la description tel quel (peut être qu'il ne veux pas la trier car le champ peut contenir jusqu'à 64000 caractères justement).


    Merci à toi J1.

    Si vous avez d'autres solutions n'hésitez pas à me les proposer.

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/03/2014, 16h38
  2. Réponses: 2
    Dernier message: 17/08/2011, 15h54
  3. [Toutes versions] requête multiple dans formulaire de recherche multi critère.
    Par Lyude dans le forum IHM
    Réponses: 16
    Dernier message: 11/05/2010, 18h51
  4. Erreur taille log TEMPDB sur requête SELECT TOP ....
    Par FMJ dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/10/2008, 17h08
  5. Pb de requète selection TOP sur plusieurs champs
    Par schnock dans le forum Langage SQL
    Réponses: 6
    Dernier message: 19/05/2008, 20h12

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