Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/04/2011, 09h00   #1
Invité régulier
 
Inscription : octobre 2009
Messages : 26
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 26
Points : 7
Points : 7
Par défaut Limit offset count

Bonjour,

Je cherche à savoir quelle est la meilleur requête sql (pour sql server) pour effectuer un select avec limit et offset (on trouve assez bien d'exemples sur le web).
En voici un
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
SELECT 
    [ID_Donnee]
      ,[Valeur]
 FROM
 (SELECT TOP 20 
        row_number() 
        OVER 
        (ORDER BY [ID_Donnee]) AS rownum, [ID_Donnee]
        ,[Valeur]
        FROM   
        [Donnee]
        ) AS A
 WHERE 
 A.rownum > 10
10 = offset
20 = limit + offset

J'aimerai également obtenir à chacune de ces requêtes le nombre total de résultats mais je ne sais pas comment le faire dans la même requête.

comme ceci
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
SELECT TotalRows,
    [ID_Donnee]
      ,[Valeur]
 FROM
 (SELECT COUNT(*) OVER () AS TotalRows,
        row_number() 
        OVER 
        (ORDER BY [ID_Donnee]) AS rownum, [ID_Donnee]
        ,[Valeur]
        FROM   
        [Donnee]
        ) AS A         
 WHERE 
 A.rownum BETWEEN 10 AND 20;
Merci d'avance pour votre aide.
fabienazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 11h00   #2
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
SELECT
[ID_Donnee]
,[Valeur]
FROM
(SELECT TOP 20
row_number()
OVER
(ORDER BY [ID_Donnee]) AS rownum, [ID_Donnee]
,[Valeur]
FROM
[Donnee]
) AS A
WHERE
A.rownum > 10
Vous cherchez à faire du paging dans une application c'est çà?

Code :
1
2
3
4
5
6
7
8
 
SELECT val1,val2,(SELECT COUNT(*) FROM TABLEA) AS NbrTotal
FROM
   (SELECT val1,
               val2,
               row_number() OVER  (ORDER BY val1) AS RowNumber
FROM TABLEA
WHERE RowNumber BETWEEN 20 AND 40
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 13h32   #3
Invité régulier
 
Inscription : octobre 2009
Messages : 26
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 26
Points : 7
Points : 7
Je cherche à savoir s'il y a une méthode plus efficace.
Par exemple (voir ci-dessous), l'utilisation de "Top (limit + offset) .... rownmuber < offset" à la place de rownmuber between offset and (limit + offset)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
SELECT TotalRows,
    [ID_Donnee]
      ,[Valeur]
 FROM
 (SELECT TOP 30 
         COUNT(*) OVER () AS TotalRows,
        row_number() 
        OVER 
        (ORDER BY [ID_Donnee]) AS rownum, [ID_Donnee]
        ,[Valeur]
        FROM   
        [Donnee]
        WHERE [Valeur] LIKE 'a%'
        ) AS A         
 WHERE 
 A.rownum > 20;
PS: Je laisserai mon count ou il était si j'utilise le TOP. Cela me permet, si j'ajoute une condition, de connaître le nombre de résultats.
fabienazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 18h01   #4
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
La méthode la plus efficace sera celle qui reposera sur un index précis et le plus concis possible pour la requête considérée et non pour une forme générique de requête !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 09h33   #5
Invité régulier
 
Inscription : octobre 2009
Messages : 26
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 26
Points : 7
Points : 7
Par défaut merci

merci
fabienazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h45.


 
 
 
 
Partenaires

Hébergement Web