[HELP]équivalent de LIMIT sur SQL Server

nikko74

Habitué
Bonjour
je souhaite utilisé LIMIT dans une requete SQL, genre SELECT blablabla FROM matable WHERE condition ORDER BY champ LIMIT 10,15
Mais c'est pas possible sous SQL Server... :( Comment je peux faire?
En faisant SELECT TOP 5 * FROM ... j'ai les 5 premiers record, mais je veux avoir le 10eme, 11eme, 12eme, etc jusqu'au XXieme...

Si vous avez une solution....

Merci!

N
 

Julien

Grand Maître
A ma connaissance ça n'existe pas, il faut que tu gères ça dans ton code en utilisant les recordsets par exemple.
 

ziedbg

Nouveau membre
Bonjour;
J'ai pas pu vérifier ce qu'il ya dans le lien de Flyman30 (j'ai pas pu l'ouvrir :( ) mais vous pouvez utiliser TOP Nombre
Ex : SELECT TOP 10 id_person FROM person . Cette requête va renvoyer les 10 premier ID de la table person.
 

zeb

Modérateur
TOP RECORD
J'en tiens un à 5 ans !

:D
____________________

Pas de déterrage, SVP [:zeb:4]
 

sacha79

Nouveau membre
La fonction LIMIT permet de gérer la pagination sous MySQL mais n'a pas déquivalent sous SQL Server. Voici un script permettant de reproduire cette mécanique en envoyant le nombre de résultat par page et le numéro.





[:zeb:6]
Pas de déterrage, même pour faire monter l'audience de ton site.
 

hakanai

Nouveau membre
Pourquoi pas de deterrage ? Je suis en 2010, j'ai la même question, ce sujet est l'un des premiers dans le résultat google et le seul lien de réponse donné en 2003 n'est plus valide.
Du coup les deux réponses donné en 2008 qui ont été censurés ne sont pas lisibles et l'ensemble du sujet est inutile....

Répondre à un sujet 5 ans plus tard c'est pas forcément ridicule... Internet ca ne vit pas que 6 mois.
 

zeb

Modérateur
Bonjour hakanai,

Le déterrage n'est pas interdit. Sinon, au bout de telle période, les sujets seraient fermés automatiquement. Il se trouve que Sacha, auteur en tout et pour tout de deux messages de pub, est venu ici non pas pour donner une solution, mais pour faire de la pub pour son site.

Quelle est donc ta question ? Juste un équivalent de LIMIT sur SQL Server !
Et bien la solution est triviale, il est même dommage que tu ne l'ai pas trouvé tout seul, si tu connais la fonction TOP. Or ziedbg en parle. Donc pas d'excuse. (Il faut juste un peu d'astuce ;) )

------------------------------

Allez, voici la soluce.

Prendre les éléments 5 à 10, c'est sélectionner les 10 premiers, puis inverser le tri sur ce résultat et prendre les 5 premiers. On peut ajouter un tri supplémentaire pour remettre les choses dans l'ordre logique :spamafote:

En SQLServer, ça donne :
Code:
SELECT * FROM ( SELECT TOP 5 * FROM ( SELECT TOP 10 * FROM ma_table ORDER BY 1 ) ORDER BY 1 DESC ) ORDER BY 1

Ça répond à tes deux questions ?
 

Gizmo_091

Expert
Bonjour zeb,
c'est exactement ce que j'ai voulu faire pour selectionner une plage de donnée et cela ne marche pas sur sql server ...

Je fais:
[cpp] SELECT TOP 10 FROM (
MA SOUS REQUETE ORDER BY DATE DESC EN SELECT TOP 20 )
ORDER BY DATE ASC [/cpp]

Et l'erreur qui ressort est la suivante :

Server: Msg 156, Level 15, State 1, Line 1
Syntaxe incorrecte vers le mot clé 'FROM'.
Server: Msg 156, Level 15, State 1, Line 6
Syntaxe incorrecte vers le mot clé 'ORDER'.
 

zeb

Modérateur
J'ai l'impression que tu n'as pas correctement copié l'exemple :/
L'astérisque fait partie de la syntaxe :o
 
M

Membre supprimé 1

Invité
ROWNUMBER & BETWEEN

SELECT * FROM
(
select *,
ROW_NUMBER() OVER (ORDER BY Truc ASC) AS Rank
FROM T
) X
WHERE Rank BETWEEN 50 AND 100;



 

zeb

Modérateur
xccc, le règlement stipule que tu dois présenter tes exemples de code entre les balises
Code:
. Merci de le respecter.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 064
Membres
1 586 286
Dernier membre
petitangebleu1977
Partager cette page
Haut