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

MS SQL Server Discussion :

Pagination et multiple order by


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Pagination et multiple order by
    Bonjour,

    Je bloque sur une requete dont le but est de paginer un jeu de resultat trier selon 3 colonnes de type "int" : CHAP, SEQ1, SEQ2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * FROM ( 
    	SELECT TOP 40 * from ( 
    		SELECT TOP 1000 * FROM rg ORDER BY CHAP, SEQ1, SEQ2
     ASC ) 
    	as tbl1 ORDER BY CHAP, SEQ1, SEQ2 DESC ) 
    as tbl2 order by CHAP, SEQ1, SEQ2 ASC
    Avec cette requete, le tri est correct mais le jeu de resultat est constament identique , peu import la valeur du 2ième TOP ("TOP 1000").

    en Modifiant un peu cette requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * FROM ( 
    	SELECT TOP 40 * from ( 
    		SELECT TOP 1000 * FROM rg ORDER BY CHAP, SEQ1, SEQ2
     ASC ) 
    	as tbl1 ORDER BY CHAP DESC ) 
    as tbl2 order by CHAP, SEQ1, SEQ2 ASC
    Je reussi à paginer mais le resultat est bizzare
    ( l'enregistrement placé à la position 28 de la page 1 se retrouve en 1ere position de la page 2 )

    Voila j'ai vraiment du mal à comprendre tout ce fonctionnement ..

    Pouvez-vous m'aidé ?

    Merci

  2. #2
    Membre averti Avatar de pulsdrum
    Homme Profil pro
    MVP SQL Server - Consultant en Business Intelligence - MCITP, MCTS et MCSA SQL Server 2008/2012
    Inscrit en
    Juillet 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : MVP SQL Server - Consultant en Business Intelligence - MCITP, MCTS et MCSA SQL Server 2008/2012
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 61
    Points : 335
    Points
    335
    Par défaut
    Bonjour,

    Regarde du côté de "TOP (...) WITH TIES".
    Pour simplifier l'écriture de ta requête utilise les Common Table Expression (CTE) : http://msdn.microsoft.com/en-us/library/ms175972.aspx

    ++

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci pour cette réponse,

    Si j'ai bien compris, WITH TIES semble seulement récupérer des enregistrement identiques au dela du TOP.

    Mon but est de paginer un resultat trier sur 3 colonnes.. je ne voit pas trop comment faire avec cette solution

    Merci
    ++

  4. #4
    Membre averti Avatar de pulsdrum
    Homme Profil pro
    MVP SQL Server - Consultant en Business Intelligence - MCITP, MCTS et MCSA SQL Server 2008/2012
    Inscrit en
    Juillet 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : MVP SQL Server - Consultant en Business Intelligence - MCITP, MCTS et MCSA SQL Server 2008/2012
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 61
    Points : 335
    Points
    335
    Par défaut
    Pourrais-tu nous donner un extrait de ton jeu de donnée, l’architecture de ta table et le résultat attendu.

    Regarde aussi l'article sur les paginations de David Barbarin (mikedavem): http://blog.developpez.com/mikedavem...et-pagination/

    ++

  5. #5
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Cet article pourra probablement vous aider.
    Et celui-ci également
    Kropernic

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour ces liens...

    Je vais regarder en détails tout ca.

    En attendant j'ai trouvé une solutions qui semble fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * FROM (
    	SELECT TOP (1000) * from ( 
    		SELECT TOP (2000) ROW_NUMBER() OVER (ORDER BY CHAP, SEQ1, SEQ2 ASC) as id, * FROM bm_rg ORDER BY id ASC )
    	as tbl1 ORDER BY id DESC )
    as tbl2 ORDER BY id ASC
    En créant une colonne 'id' puis faire le tri dessus.
    J'imagine que cette méthode doit être présentée dans les liens ci-dessus...

    Merci encore pour votre aide.


    PS :

    Structure de la table :
    3 colonnes de type int :

    CHAP - SEQ1 - SEQ2
    0 - 10 - 8
    1 - 100 - 4
    1 - 10 - 5
    0 - 10 - 4



    Résultat attendu :
    0 - 10 - 4
    0 - 10 - 8
    1 - 10 - 5
    1 - 100 - 4


    Le resulat est ensuite paginé à n lignes par page.

Discussions similaires

  1. [Débutant] Ajouter Search et pagination de multiples tables ASP.NET MVC
    Par jérémyp8 dans le forum Développement Web avec .NET
    Réponses: 2
    Dernier message: 08/02/2015, 20h58
  2. Probleme sur requête avec order by multiple
    Par dembroski dans le forum Requêtes
    Réponses: 25
    Dernier message: 28/01/2010, 15h47
  3. order by multiple
    Par jm49 dans le forum Hibernate
    Réponses: 5
    Dernier message: 08/08/2009, 23h46
  4. order by multiple
    Par bylka dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/03/2009, 14h28
  5. Souci Order By multiple
    Par guitou12 dans le forum Oracle
    Réponses: 4
    Dernier message: 11/09/2006, 17h06

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