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 :

Erreur dans la FAQ LIMIT


Sujet :

MS SQL Server

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut Erreur dans la FAQ LIMIT
    Il me semble qu'il y a une erreur ici:

    http://sqlserver.developpez.com/faq/?page=Recordset#JE2

    Affiche 30 lignes à partir de l'enregistrement 10. Voici une solution pour implémenter cette fonctionalité en SQL
    Le bon code est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT * FROM ( 
             SELECT TOP 10 Field1, Field2 FROM ( 
             SELECT TOP 40 Field1, Field2 
             FROM  matable 
            ORDER BY monchamp asc 
            ) AS tbl1 ORDER BY monchamp desc 
            ) AS tbl2 ORDER BY monchamp asc
    On prend les 40 premieres lignes (30+10) et on garde les 10 dernieres.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 917
    Points : 51 693
    Points
    51 693
    Billets dans le blog
    6
    Par défaut
    De toute façon ceci est faux, car spécifique à MS SQL Server. Une solution générale en pur SQL nécessite une auto non équi jointure avec comptage.
    Une autre solution si le SGBDR intègre les fonctions de fenêtrage comme ROWNUM() est de l'encapsuler dans une sous requête, de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM   (SELECT *, ROWNUM() OVER(ORDER BY COLONNE1) AS N
            FROM   MA_TABLE) T
    WHERE  N BETWEEN 10 AND 40
    Ceci fait partie de la norme SQL:1999 et devrait être présent dans la plupart des SGBDR.

    A +

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    Comment fait-on le comptage sur MS SQL-Server comme ROWNUM() n'existe pas ?

    EDIT: J'ai trouvé mon bonheur ici http://support.microsoft.com/default.aspx?scid=KB;EN-US;q186133

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 917
    Points : 51 693
    Points
    51 693
    Billets dans le blog
    6
    Par défaut
    C'est le principe de l'auto non équi jointure avec comptage...

    SELECT ...
    FROM T1
    INNER JOIN T1
    ON TI.? >= T2.?
    GROUP BY...
    HAVING COUNT(T1.?) BETWEEN ... AND ...

    A +

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

Discussions similaires

  1. Fonction LIMIT : Erreur dans la FAQ ?
    Par le Daoud dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 04/10/2007, 21h08

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